Kommandozeile

Die besten Profi-Befehle für Windows

27.01.2023 von Thorsten Eggeling
Die Kommandozeile bietet unter Windows einen wahren Schatz an nützlichen Befehlen und Tools. Wir liefern Beispiele für die Powershell, blicken aber auch auf Eingabeaufforderung und Bash-Shell.

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

Jede Shell griffbereit: Im Windows-Terminal lassen sich Powershell, Eingabeaufforderung und Bash-Shell (WSL2) nebeneinander in Registerkarten starten.

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

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.

Abkürzungen für Befehle: In der Powershell sind für häufig genutzte Befehle entsprechende Alias definiert. Statt Get-Content beispielsweise kann man cat verwenden.

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.

Verzeichnisse und Dateien auflisten: Get-ChildItem entspricht dir in der Eingabeaufforderung. Geben Sie einen Pfad an, um in ein bestimmtes Verzeichnis zu sehen.

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

Textdateien bearbeiten: Einen Editor für das Terminal bietet Powershell nicht. Man kann aber auf den Editor nano aus dem Windows Subsystem für Linux ausweichen.

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

System und Hardware: Get-ComputerInfo zeigt beispielsweise an, welche Windows-Version installiert ist und welcher Prozessor im Computer steckt.

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 läuft auf dem PC? Get-Process zeigt die laufenden Prozesse sowie die zugehörigen IDs an und gibt Infos zu Speicherbelegung und CPU-Belastung aus.

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.

Ntop für das Terminal: Das Tool zeigt die laufenden Prozesse in Echtzeit. Die Spalten lassen sich sortieren, und man kann hängende Prozesse bei Bedarf beenden.

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

Verbindung prüfen: Test- Connection gibt in der Powershell die IP-Adresse zurück, wenn ein lokaler Rechner oder ein Server im Internet auf eine Anfrage reagiert.

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)