Tools und Anwendungen lassen sich in der grafischen Oberfläche meist intuitiv nutzen. Schaltfläche und Menüs zeigen, wohin man klicken muss, um eine bestimmte Funktion aufzurufen. Je nach Programm können grafische Oberflächen aber auch sehr unübersichtlich werden, etwa wenn man sich für eine bestimmte Aufgabe immer wieder durch tief verschachtelte Menüs hangeln muss.
Die Kommandozeile versprüht dagegen einen vergleichsweise spröden Charme. Der blinkende Cursor verlangt nach Eingaben, die man sich aber erst zusammensuchen muss. Dabei sind die Befehle und Optionen durchaus verständlich, wenn man die englischsprachigen Abkürzungen ein paar Mal gelesen, aufgelöst und eingetippt hat.
Windows bietet mehrere Interpreter für Kommandozeilen. Zu Beginn des Artikels zeigen wir, was Sie installieren können, um dann kurze Beispiele für die Powershell vorzustellen. Zum Vergleich behandeln wir auch teilweise die Besonderheiten von Eingabeaufforderung und Bash-Shell.
Hinweis: In der Powershell und der Eingabeaufforderung spielen Groß- und Kleinschreibung keine Rolle, in der Bash-Shell wird unterschieden.
Das Terminal unter Windows: Einer für alles
Die klassische Kommandozeile unter Windows ist die Eingabeaufforderung oder, genauer, seit Windows NT der Befehlsinterpreter Cmd.exe. Der designierte Nachfolger war die Windows-Powershell, die in der Version 5.1 bei Windows 10 und 11 vorinstalliert ist. Aktuell ist die plattformübergreifende und quelloffene Version Powershell 7, die es auch für Mac-OS und Linux gibt. Dazu kommt das Windows Subsystem für Linux in Windows 10 und 11, das mit der Bash-Shell eine eigene Kommandozeile bietet.
Alles Genannte lässt sich im Windows-Terminal nutzen, bei Bedarf nebeneinander in mehreren Registerkarten. Bei Windows 11 ist Windows-Terminal bereits mit dabei. Nutzer von Windows 10 richten es aus dem Microsoft Store über eine Suche nach Terminal ein. Installieren Sie auch das Tool Winget, das Sie über den Suchbegriff App-Installer finden. Es ermöglicht die schnelle Installation von Tools und Anwendungen über die Kommandozeile. Winget gehört bei Windows 11 bereits zum Lieferumfang.
Starten Sie das Windows-Terminal über eine Suche im Startmenü. Oder Sie drücken die Tastenkombination Win-R, tippen wt ein und bestätigen mit "OK". Im Windows-Terminal startet standardmäßig die Windows Powershell. Die Eingabeaufforderung und weitere Shells lassen sich über das Menü hinter der Schaltfläche mit dem Pfeil nach unten aktivieren. Starten Sie Windows-Terminal für Programminstallationen und Updates als Administrator. Dann müssen Sie die Rechteerhöhung nicht bei jeder Aktion bestätigen. Dazu verwenden Sie die Suche im Startmenü und den Kontextmenüpunkt "Als Administrator ausführen".
Die aktuelle Version der Powershell 7 installieren Sie in der administrativen Windows-Powershell oder Eingabeaufforderung mit
winget install --id Microsoft. Powershell |
Wir beziehen uns in diesem Artikel auf diese Version. Die meisten Befehle funktionieren aber auch in der Windows Powershell 5.1.
Welche Powershell-Version Sie gerade nutzen, erfahren Sie mit dem Befehl
$PSVersionTable |
Wer das Windows Subsystem für Linux (WSL) beziehungsweise die Bash-Shell installieren möchte, verwendet
wsl --install |
Danach muss man Windows neu starten. Wenn es nur um die Bash-Shell geht, können Sie auch Msys2 installieren. Neben Werkzeugen für Entwickler sind darin auch viele nützliche Tools aus der Linux Welt enthalten.
Achtung: Besonderheiten bei der Shell-Nutzung
Im Windows-Explorer sind die Bezeichnungen einiger Elemente für die deutsche Sprache lokalisiert. Was im Dateimanager als „C:\Benutzer“ auftaucht, heißt tatsächlich „C:\Users“, die Ordner „Dokumente“ und „Bilder“ heißen „Documents“ und „Pictures“. In der Shell wird die Lokalisierung nicht berücksichtigt, und Sie müssen daher für einige Ordner die englischsprachigen Bezeichnungen verwenden.
Datei- und Ordnernamen, die Leerzeichen enthalten, setzt man in Anführungszeichen (doppelt oder einfach), beispielsweise: cd “C:\Program Files (x86)”
In der Powershell kann man die automatische Vervollständigung mit der Tab-Taste nutzen. “cd C:\Pr” gefolgt von der Tab-Taste wird zu „C:\Program Files\“ ergänzt, ein weiterer Tastendruck liefert „C:\Program Files (x86)\“. Die Ergänzung funktioniert auch bei Befehlen. Bei Get-Ch liefert die Tab-Taste sofort „Get-ChildItem“.
Shell-Befehle beziehen sich immer auf den aktuellen Ordner. Der direkte Start von Programmen über den Namen erfolgt in der Powershell mit einem vorangestellten „.\“, wenn das Programm im aktuellen Verzeichnis liegt. Andernfalls ist der absolute Pfad zur Exe-Datei erforderlich.
Umständliche Pfadangaben lassen sich vermeiden, wenn Sie Ordner mit Tools in den Suchpfad aufnehmen. Erstellen Sie beispielsweise den Ordner „C:\Tools“, und kopieren Sie alle gewünschten Zusatzwerkzeuge für die Kommandozeile hinein. Über Win-R rufen Sie SystemPropertiesAdvanced auf. Klicken Sie auf „Umgebungsvariablen“, im oberen Bereich auf „Path“ und dann auf „Bearbeiten“. Über „Neu“ nehmen Sie den Ordner „C:\Tools“ in die Pfad-Variable auf. Entsprechend verfahren Sie mit anderen Ordnern, beispielsweise „C:\msys64\usr\bin“ oder mit den Tools-Ordnern von WSCC.
Mit Verzeichnissen und Laufwerken arbeiten
Wo man sich im Dateisystem gerade befindet, zeigt in allen Shells der Prompt an. Standardmäßig ist es das Profil- beziehungsweise Home-Verzeichnis des Benutzers, das bei Powershell und Eingabeaufforderung im Prompt als "C:\Users[Benutzername]" zu sehen ist. Mit dem Befehl
cd C:\Windows |
wechselt man das angegebene Verzeichnis. Bem Pfad "C:\Windows" handelt sich um einen kompletten beziehungsweise absoluten Pfad. Mit
cd C:\ |
wechselt man in das Hauptverzeichnis von Laufwerk "C:", und dann mit
cd C:\ |
in das Verzeichnis "Windows". Dabei handelt es sich um einen relativen Pfad, also relativ zu "C:\" (siehe Kasten auf Seite 22). In der Powershell kann man Laufwerk und Pfad gleichzeitig wechseln:
cd X:\Backup |
In der Eingabeaufforderung verwendet man dafür den Befehl
cd /D X:\Backup |
Bash-Shell: Das Windows Subsystem für Linux greift auf ein anderes Home-Verzeichnis zu. Es liegt unter einem Pfad wie "C:\ Users[Benutzername]\AppData\Local\Packages\CanonicalGroupLimited.Ubuntuon-Windows_[Code]\LocalState\rootfs\home\ [Benutzername]". In der Powershell lässt sich der komplizierte Pfad über
cd \wsl$\Ubuntu\home\ [Benutzername]
erreichen. Mit cd ohne weitere Parameter geht es wieder zurück ins Windows-Profilverzeichnis.
Alias und Cmdlets: In der Powershell kann man statt cd auch
Set-Location X:\Backup |
verwenden. cd ist tatsächlich nur ein Alias für das Cmdlet Set-Location. Als Cmdlets werden die Befehle in Powershell bezeichnet. Die umfangreiche Liste mit vordefinierten Alias ist mit
Get-Alias |
abrufbar.
Get-Alias | more |
gibt den Text seitenweise aus; verwenden Sie die Leertaste zum Blättern und die QTaste zum Beenden. Das Pipe-Zeichen "|" leitet die Ausgabe an more weiter, das für die Paginierung sorgt. Die folgende Befehlszeile leitet die Ausgabe in eine Datei um:
Get-Alias > alias-list.txt |
Öffnen Sie die Datei mit Notepad:
notepad alias-list.txt |
Viele Alias dienen als Abkürzung für die eher umständlichen Cmdlets und orientieren sich an den Befehlen in der Eingabeaufforderung und Bash-Shell. Die Syntax unterscheidet sich aber oft, wenn man zusätzliche Optionen verwenden will. Der Befehl
Get-ChildItem |
zeigt den Inhalt des aktuellen Verzeichnisses an. Fügt man den Pfad mit
Get-ChildItem C:\Windows |
an, wird der Inhalt dieses Verzeichnisses angezeigt.
Alternativ verwenden man den Alias dir - wie in der Eingabeaufforderung - oder ls in der Bash-Shell (Tabelle auf Seite 21).
Remove-Item [Pfad] |
löscht ein Verzeichnis oder eine Datei (Alias: del, rm, rmdir). Ohne weitere Parameter arbeitet der Befehl interaktiv, wenn der Ordner nicht leer ist. Tippen Sie A ein, um alle enthaltenen Ordner und Dateien ohne weitere Rückfragen zu löschen. Oder Sie verwenden für den gleichen Zweck
Remove-Item [Pfad] -Recurse |
In der Eingabeaufforderung löscht
rmdir /S /Q [Pfad] |
Verzeichnisbäume ohne Rückfrage, und in der Bash-Shell kommt
rm -r [Pfad] |
zum Einsatz.
Ordner packen: Compress-Archive packt Ordner in ZIP-Archive:
Compress-Archive [Pfad] -DestinationPath E:\Backup\ Archiv.zip |
Für "[Pfad]" setzen Sie den Ordner ein, den Sie packen wollen. Hinter "-Destination- Path" steht die Zieldatei mit Pfadangabe. Der Ordner muss bereits vorhanden sein.
Expand-Archive E:\Backup\Archiv.zip -DestinationPath [Pfad] |
entpackt die ZIP-Datei in den mit "[Pfad]" angegebenen Ordner.
Das von Linux/WSL bekannte Tool Tar ist bei Windows 10 und 11 ebenfalls mit dabei.
tar -cf E:\Backup\Archiv.tar [Pfad] |
fasst den mit "[Pfad]" angegebenen Ordner schnell und ohne Komprimierung in der Datei "E:\Backup\Archiv.tar" zusammen.
tar -czf E:\Backup\Archiv.tar.gz [Pfad] |
erzeugt ein Gzip-komprimiertes Archiv, was etwas länger dauert. Statt "z" (Gzip) kann man auch "j" (bzip2) oder "J" (xz) verwenden, wodurch das Archiv stärker komprimiert wird.
Ordnergrößen ermitteln: Die Zeile
Get-ChildItem -file -recurse [Pfad] | Measure-Object -property length -Sum |
gibt die Größe des mit "[Pfad]" angegebenen Ordners aus. Die jeweiligen Einzelgrößen der Unterverzeichnisse gibt
FolderSizes [Pfad] |
aus. Die zusätzliche Funktion "FolderSizes" ist in der Profildatei "Microsoft.PowerShell_ profile.ps1" enthalten, die Sie mit PC-WELT Skript-Downloader einrichten. In der Bash-Shell kann man
du -h [Pfad] |
starten. Du.exe ist ein nützliches Tool von Microsoft-Sysinternals mit ähnlicher Funktion. Es lässt sich über Windows System Control Center herunterladen und installieren. Der Aufruf erfolgt mit
du -v [Pfad] |
und zeigt die Größe der einzelnen Ordner und die Gesamtsumme an.
Dateien ansehen, kopieren, löschen und mehr
Unter Windows verwenden die meisten Programme die Registry als Konfigurationsspeicher. Textdateien kommen nur selten zum Einsatz. Wer schnell einen Blick in eine Konfigurationsdatei werfen möchte, verwendet beispielsweise
Get-Content C:\Windows\System32\drivers\etc\hosts |
Die Alias sind cat und type, wie bei Bash beziehungsweise der Eingabeaufforderung. Einen Texteditor für das Terminal gibt es für Windows bisher nicht. Man kann aber WSL nutzen:
wsl nano /mnt/c/Windows/System32/drivers/etc/hosts |
Eine Alternative ist nano aus dem Paket Msys2:
C:\msys64Sr\bin\nano.exe C:\ Windows\System32\drivers\etc\hosts |
Bei diesem Beispiel lässt sich die Datei nur ändern, wenn die Powershell mit administrativen Rechten gestartet wurde.
Mit Copy-Item lassen sich Dateien kopieren (Alias: copy und cp).
Copy-Item [Quelle] [Ziel] |
"[Quelle]" enthält den kompletten Pfad zu einer Datei, für "[Ziel]" reicht ein Ordner aus. Gibt man hier den Pfad plus einen neuen Dateinamen an, wird die Datei mit dem neuen Namen angelegt. Eine in "[Ziel]" bereits vorhandene Datei gleichen Namens wird ohne Rückfrage überschrieben. Die zusätzliche Option "-confirm" ändert daran auch nichts, weil man zwar die Kopieraktion bestätigen muss, aber nichts über vorhandene Dateien erfährt. Besser geht's mit einer etwas komplexeren Konstruktion:
(Test-Path [Quelle]) ? "Datei vorhanden" : (Copy-Item [Quelle] [Ziel]) |
"Test-Path" prüft, ob "[Quelle]" vorhanden ist. Wenn ja, wird der Hinweistext ausgegeben, andernfalls wird die Datei kopiert.
Dateien suchen: Get-ChildItem kennt einige Optionen, die sich für die Suche nutzen lassen.
Der Befehl durchsucht das angegebene Verzeichnis und gibt Dateien aus, deren Namen "Brief" an beliebiger Stelle enthält. "Brief" zeigt Dateien, die mit dem Suchbegriff beginnen, und "Brief" zeigt Dateien, die damit enden. Lassen Sie "-File" weg, damit der Befehl auch Verzeichnisse berücksichtigt. Der Klassiker für die Suche nach Dateinamen in der Eingabeaufforderung laute
dir /s C:\Users[Benutzername]\ Documents*Brief*
Die Option "/s" bewirkt eine rekursive Suche im Ordner nach dem angegebenen Suchmuster.
Get-ChildItem C:\Users[Benutzername]\Documents*.txt -Recurse | Select-String „dummy“ -List
sucht im Inhalt von Textdateien nach der hinter Select-String angegebenen Zeichenkette "dummy" und gibt den Text mit der Fundstelle aus.
Wenn Sie nur den Dateinamen alleine benötigen, hängen Sie " | -Select Path" an.
Powershell-Befehle für System und Hardware
Powershell bietet Cmdlets, mit denen sich Informationen zu System und Hardware ausgeben lassen. Am umfassendsten ist
Get-ComputerInfo
Sie erfahren beispielsweise, welche Windows-Version installiert ist, von wem das Bios stammt und wie die CPU heißt.
Die Ausgabe lässt sich auch filtern. Der Befehl
Get-ComputerInfo -Property "*version"
listet alle Eigenschaften auf, in denen "version" am Ende der Zeile vorkommt.
Einzelne Infos lassen sich gezielt ermitteln:
Get-CimInstance -ClassName Win32_OperatingSystem
Der Befehl gibt die Build-Nummer und Version des installierten Windows aus. Mit
Get-CimClass
können Sie sich alle Werte anzeigen lassen, die für "-ClassName" verfügbar sind. Die Liste ist sehr lang, weshalb ein Filter wie
Get-CimClass -ClassName disk
hilft, alle Einträge zu finden, die etwas mit Festplatten und Laufwerken zu tun haben.
Get-CimInstance -ClassName Win32_DiskDrive
beispielsweise zeigt alle Laufwerke, deren Bezeichnung und Kapazität an.
Winaudit liefert Analysen von System, Software und vielen Bereichen der Hardware. Es bietet eine grafische Oberfläche, lässt sich aber auch über die Kommandozeile steuern. Entpacken Sie das Programm beispielsweise nach "C:\Tools". Starten Sie das Tool zuerst in einer administrativen Powershell mit
C:\Tools\WinAudit.exe
In der grafischen Oberfläche gehen Sie auf "Hilfe -› Winaudit benutzen". Im Abschnitt "10) Command Line Usage" finden Sie eine Übersicht mit den möglichen Optionen. Beenden Sie das Programm. Erzeugen Sie einen Report in der Powershell:
C:\Tools\WinAudit.exe /r=gopm /l=log.txt /f=computer.html
Die Datei "computer.html" liegt danach im Ordner "C:\Tools" und lässt sich im Webbrowser öffnen. Durch die Option "/r =gopm" sind eine Systemübersicht und Infos zu Betriebssystem, Prozessor und Speicher enthalten.
Windows herunterfahren oder neu starten: In der Powershell kann man den PC mit
Stop-Computer
herunterfahren und mit
Restart-Computer
neu starten. Das Kommandozeilentool Shutdown bietet mehr Optionen:
shutdown /s /t 5
fährt den Computer in fünf Sekunden herunter. Der Standard ist 30 Sekunden.
shutdown /r
startet Windows nach 30 Sekunden neu. Nützlich kann
shutdown /r /fw
sein, was einen Neustart durchführt und in das Uefi-Firmware-Setup bootet.
Infos zu Prozessen und Diensten einholen
Was auf dem PC gerade läuft, findet man in der Powershell mit diesem Befehl heraus:
Get-Process
In der Tabelle sind neben Prozessnamen auch Speicherbelegung, CPU-Zeit und die Prozess-ID enthalten. Die Befehlszeile
Get-Process -Name "firefox" | Sort-Object -property CPU -descending
zeigt nur die Firefox-Prozesse an, sortiert nach CPU-Zeit. Der Befehl
(Get-Process -Name "Firefox").Path
gibt Pfad und Namen der ausführbaren Datei zurück. Drücken Sie nach dem Punkt mehrfach die Tab-Taste, um durch die verfügbaren Eigenschaften zu blättern.
Verwenden Sie den folgenden Befehl, wenn Sie alle Prozesse mit dem Namen "Notepad" ohne Rückfrage beenden wollen:
Stop-Process -Name "notepad"
Es ist zielgenauer, zuerst mit Get-Prozess die Prozess-ID zu ermitteln und dann
Stop-Process -ID [ID]
zu verwenden.
Das Tool Ntop ist dem Linux-Programm Htop nachempfunden. Es zeigt die laufenden Prozesse grafisch aufbereitet im Terminal. Mit Strg-Pfeil-nach-rechts und Strg-Pfeil-nach-links lässt sich die Sortierreihenfolge verändern. Mit der Leertaste kann man einen Prozess markieren und mit Shift-K abschießen. Mit der Taste Q beenden Sie das Programm.
Dieser Befehl zeigt alle Windows-Dienste inklusive Status und Kurzbeschreibung an:
Get-Service
Hat man den Namen eines Dienstes damit ermittelt, kann man ihn mit
Stop-Service [Dienstname]
und mit
Start-Service [Dienstname]
wieder starten. Den Platzhalter ersetzen Sie mit dem Kurznamen des Dienstes.
Befehle für Netzwerk und Internet
Die Erreichbarkeit eines Computers im lokalen Netzwerk oder im Internet prüft man in der Eingabeaufforderung mit
ping -4 [Computername oder Domain]
Die Option "-4" zeigt die IPv4-Adresse an, "-6" setzen Sie für IPv6-Adressen ein. In der Powershell eignet sich
Test-Connection -IPv4 google.de
für die gleiche Aufgabe. Die Option "-IPv6" statt "-IPv4" liefert Ergebnisse für IPv6. Der Befehl
Test-Connection -Traceroute [Computername oder Domain]
zeigt an, welchen Weg die Datenpakete durch das Netzwerk nehmen und wie lange das dauert. Das entsprechende Kommando in der Eingabeaufforderung lautet
tracert [Computername oder Domain]
Verwenden Sie
Get-NetIPConfiguration
für eine Liste der Netzwerkadapter mit den zugehörigen IP-Adressen.
Dateien etwa von einem Webserver kann man über Powershell ebenfalls herunterladen. Die Befehlszeile
curl -O [URL]
lädt die Datei in das aktuelle Verzeichnis herunter, auf die "[URL]" verweist.
(PC-Welt)