Die DOS-Kommandozeile war unser allererstes Kommunikationsmittel mit dem PC – und es gibt sie immer noch, das zugehörige Programm heißt cmd.exe.  Allerdings gibt es nun schon seit vielen Jahren die Powershell, eine ungleich mächtigere Kommandozeile, die man auch als Programmierumgebung verwenden kann. Ich möchte einige Umgangsformen mit der Powershell zeigen, ausgehend von dem Befehlsvorrat, den wir von der DOS-Kommandozeile kennen. Das Ziel dieses Beitrags ist es, dass wir mit Powershell arbeiten können und zunächst einmal die alten DOS-Befehle (fast) unverändert weiterverwenden. Bei den Links finden sich auch vollständigere Einführungen in diese Kommandosprache.

Aufruf

Über das Kurzkommando Windows-X (oder rechte Maustaste auf das Windows-Symbol) bekommt man eine   Darstellung der Schnelleinstiege in die PC-Administration. Je nachdem, wie die Taskleiste konfiguriert ist, sieht man eines von diesen beiden Bildern:

Im linken Bild für das Administrationsmenü sieht man „Eingabeaufforderung“ und rechts „Windows PowerShell“. Beides kann man nicht gleichzeitig aktivieren, man muss sich für eines von beiden entscheiden. Umgeschaltet wird unter Windows-X -> Einstellungen -> Taskleiste.

Dort kann man eine der beiden Kommandozeilen auswählen.

Hier der Unterschied, links cmd.exe (schwarz), rechts Powershell (blau)

:

Zusätzlich zum blauen Hintergrund wird dem Prompt bei der Powershell auch ein "PS" vorangestellt. Die Farben und Schriftgrößen können über das Kontextmenü links oben verstellt werden.

Voreinstellung Powershell

Ich schlage vor, dass wir mit der Zeit gehen und die Powershell voreinstellen. Es ist überhaupt kein Problem, mit einem einzigen Kommando in der Powershell ein klassisches DOS-Fenster (CMD) zu öffnen. Befindet man sich in der Powershell, kann man mit

PS s:\desktop>start cmd

jederzeit eine klassische Kommandozeile öffnen und umgekehrt in einem DOS-Fenster mit

s:\desktop>start powershell

das blaue Powershell-Fenster.

Wenn man das Fenster nicht verlassen will, lässt man das start einfach weg.

DOS-Befehle

Wie viele DOS-Befehle gibt es? In der aktuellen Version von Windows 10 sind es 84. Lernen muss man sie nicht, man kann sie jederzeit mit

C:\Users\franz>help

anzeigen lassen. Mit help <befehl> erfährt man Details zu diesem Befehl. Hier ist eine Liste aller DOS-Befehle:

ASSOC · ATTRIB · BREAK · BOOTCFG · CACLS · CALL · CD · CHCP · CHDIR · CHKDSK · CHKNTFS · CLS · CMD · COLOR · COMP · COMPACT · CONVERT · COPY · DATE · DEL · DIR · DISKPART · DOSKEY · DRIVERQUERY · ECHO · ENDLOCAL · ERASE · EXIT · FC · FIND · FINDSTR · FOR · FORMAT · FSUTIL · FTYPE · GOTO · GPRESULT · GRAFTABL · HELP · ICACLS · IF · LABEL · MD · MKDIR · MKLINK · MODE · MORE · MOVE · OPENFILES · PATH · PAUSE · POPD · PRINT · PROMPT · PUSHD · RD · RECOVER · REM · REN · RENAME · REPLACE · RMDIR · ROBOCOPY · SET · SETLOCAL · SC · SCHTASKS · SHIFT · SHUTDOWN · SORT · START · SUBST · SYSTEMINFO · TASKLIST · TASKKILL · TIME · TITLE · TREE · TYPE · VER · VERIFY · VOL · XCOPY · WMIC

Wendet man den HELP-Befehl im Powershell-Fenster an, bekommt man eine Hilfe über die Hilfe, denn der Hilfe-Befehl bei Powershell heißt Get-Help und der liefert in der Version Get-Help * 2222 Befehle, und das kann schon was. Man muss sie natürlich nicht gleich alle lernen, denn zunächst finden wir mit den bekannten DOS-Befehlen das Auslangen, weil wir gleich sehen werden, dass viele der DOS-Befehle in Powershell ganz genau so verwendet werden können.

Ob man Get-Help oder get-help oder GET-HELP schreibt, ist egal, auf dieser Ebene ist Powershell unempfindlich.

DOS-Ähnlichkeit

Die schlechte Nachricht: Der Aufbau der Powershell ist objektorientiert und geht in der Systematik der Möglichkeiten weit über die uns bekannten DOS-Parameter hinaus. Der Befehlsaufbau ist ganz anders.

Die gute Nachricht: Die meisten DOS-Befehle werden dennoch korrekt ausgeführt, weil die meisten DOS-Befehle externe Befehle sind. Und die Powershell arbeitet so wie DOS: wird ein Befehl nicht als interner Befehl erkannt, wird er auf der Festplatte gesucht, gefunden und ausgeführt. Alle externen DOS-Befehle funktionieren also wie gewohnt.

Interne DOS-Befehle funktionieren nicht, wie zum Beispiel ASSOC, DATE, TIME und andere, weil es dafür in Powershell andere Befehle gibt. Wie kann man sie dennoch ausführen? Ganz einfach, man stellt in der Powershell-Kommandozeile cmd /c vor. Die Option /c führt den Befehl aus und endet dann.  Will man also die DOS-Zeit anzeigen lassen, schreibt man

PS S:\desktop> cmd /c time
Aktuelle Zeit: 7:53:21,18
Geben Sie die neue Zeit ein:
PS S:\desktop>

Hat ein DOS-Befehl mehrere Argumente, muss man diese in Anführungszeichen stellen, denn sonst würde nur das erste Argument übernommen werden. Beispiel:

cmd /c "sc query lanmanserver"

Reservierte Zeichen

Es wurde gesagt, dass externe DOS-Befehle so wie in DOS ausgeführt werden. Das stimmt auch, aber im Zusammenhang mit Optionen, die einem Befehl folgen, kann es zu Problemen mit Zeichen geben, die in Powershell eine besondere Bedeutung haben.

Beispiel: mit dem folgenden DOS-Befehl wird allen Benutzern am Verzeichnis c:test voller Zugriff gewährt:

c:>icacls.exe c:test /grant user: (F)

Das Problem sind die Klammern am Ende, die zu einer Powershell-Fehlermeldung führen. In diesem Fall kann man den ganzen Befehl einklammern und mit cmd /c starten:

c:>cmd /c "icacls.exe c:test /grant user: (F)"

Powershell Escape Zeichen

Eine zweite Lösung ist das voranstellen der Powershell-Excape-Zeichens ` (Accent Grave), also so:

c:>icacls.exe c:test /grant user: `(F`)

Häufige Befehle

Es verbleibt eine Befehlsgruppe besonders häufiger interner Befehle, die durch einen so genannten Alias-Namen in Powershell ganz so ausschauen, als wären sie DOS-Befehle. Der wichtigste dieser Befehle ist wohl DIR. Die vollständige Liste ist: CD, CLS, COPY; DEL DIR, ECHO, ERASE, FC, HELP, MD, MORE, POPD, PUSHD, RD, REN, RMDIR, START und TYPE.

Gibt man DIR in einem DOS-Fenster ein und danach in einem Powershell-Fenster, schaut die Ausgabe fast gleich aus, aber nur fast. Man sieht, dass die Spalten in Powershell anders aufgebaut sind, ein Hinweis darauf, dass eben ein ganz anderes Programm hinter dem DIR-Befehl steckt.

Bereits bei den Optionen ist es mit der Ähnlichkeit vorbei, denn während man in DOS den Kommandozeilenparameter /b benötigt, um nur den Dateinamen angezeigt zu bekommen, also

s:\desktop\>dir /b

ist es in Powershell der Befehl

s:\desktop\>dir -Name

Das ist nun nicht umwerfend anders, aber ein wichtiger Unterschied ist, dass Parameter nicht mit Schrägstrich sondern mit einem Bindestrich beginnen und dass sie nicht aus einem Buchstaben bestehen, sondern immer aus einem sprechenden Wort.

Cmdlet

Die Befehle in Powershell nennt Cmdlet. Man kann jederzeit selbst solche Cmdlets formulieren.

Jeder Inhaltsverzeichniseintrag ist in Powershell ein Objekt mit zahlreichen Eigenschaften wie Pfad, Name, Attribute usw.

Um das zu verstehen, muss man wissen, dass alle Powershell-Kommandos als Ergebnis Objekten zurückliefern und eigentlich verbirgt sich hinter DIR der Befehl Get-ChildItem. Und weil das viel zum Eingeben wäre, kann man es auch mit DIR abkürzen. Man nennt diese Abkürzung einen Alias-Namen.

Aus dem Aufbau von Get-ChildItem kann man die generelle Kommandostruktur von Powershell ablesen. An erster Stelle steht ein Verb, also Get-, Set-, Join-, New-, Remove-, Clear-, Start-, Stop-, Suspend- und danach steht nach dem Bindestrich ein Objekt, auf das das Verb anzuwenden ist.

Genaugenommen müsste man dem Get-ChildItem sagen, welcher Pfad gemeint ist und was sonst zu tun ist, aber damit ist es so wie in DOS. Wenn nichts dazu gesagt wird, gilt automatisch der aktuelle Pfad, auf den sich das Kommando bezieht und auch das Format ist vordefiniert. Aber man kann alles durch Parameter ändern.

Piping

Die Ausgabe eines Befehls kann auf den Bildschirm gerichtet sein oder aber als Input für weitere Befehle dienen. So wie in DOS nennt man diese Objektweiterleitung eine Pipe und das Zeichen, das diese Pipe ermöglicht ist ein senkrechter Strich.

Beispiel: (1) Man holt das Inhaltsverzeichnis des Verzeichnisses s:\quellpfad rekursiv durch alle eventuellen Unterverzeichnisse, (2) sortiert es nach dem Datum absteigend und (3) speichert die ersten fünf gefundenen Dateien am Desktop.

Get-ChildItem s:\quellpfad -Recurse | Select Name, DirectoryName, LastWriteTiem, Full Name | Sort LastWriteTiem -Descending | Select -First 5 | Copy-Item -Destination s:\desktop

Das ist schon ziemlich mächtig!

Was tun im Problemfall? Hilfe suchen, alles ist in der Konsole verfügbar!

Hilfe

Um alle Optionen des DIR-Befehle kennen zu lernen (Achtung der Befehl heißt eigentlich Get-ChildItem und wird nur der Einfachheit halber mit DIR abgekürzt), gibt man ein:

Get-Help DIR

Man erhält den Aufbau des Befehls:

Get-ChildItem [[-Path] <String[]>] [[-Filter] <String>] [-Attributes <System.Management.Automation.FlagsExpression`1[System.IO.FileAttributes]>] [-Depth <UInt32>] [-Directory ] [-Exclude <String[]>] [-File ] [-Force ] [-Hidden ] [-Include <String[]>] [-Name ] [-ReadOnly ] [-Recurse ] [-System ] [-UseTransaction ] [<Allgemeine Parameter>]

und dazu eine genaue Erklärung zu allen Optionen. Die <Allgemeinen Parameter> gelten für jeden Befehl, man erfährt sie so:

Get-Help about_CommonParamters

Version

Die Dokumentation von Microsoft beschreibt die Version 6, allerdings ist auf meinem PC die Version 5.1 installiert. Um die aktuelle Version zu erfahren, in der PowerShell-Konsole $PSVersionTable eingeben.

Hier sieht man den objektorientierte Aufbau der Powershell. Dieser Befehl liefert ein Objekt zurück. Die Ausgabe am Bildschirm zeigt die einzelnen Eigenschaften tabellarisch. Will man tatsächlich nur die Version, schreibt man $PSVersionTable.PSVersion.

Ausblick

In unregelmäßiger Folge werden wir in diesem Blog weitergehende Möglichkeiten vorstellen wie zum Beispiel die Programmieroberfläche und ausgewählte Beispiele.

Einstiege

Powershell bei ClubComputer

ANHANG: Alle DOS-Befehle

ASSOC Zeigt Dateierweiterungszuordnungen an bzw. ändert sie.
ATTRIB Zeigt Dateiattribute an bzw. ändert sie.
BREAK Schaltet die erweiterte Überprüfung für STRG+C ein bzw. aus.
BOOTCFG Legt Eigenschaften zur Steuerung des Startladenvorganges in der  Startdatenbank fest.
CACLS Zeigt Datei-ACLs (Access Control List) an bzw. ändert sie.
CALL Ruft eine Batchdatei von einer anderen Batchdatei aus auf.
CD Zeigt den Namen des aktuellen Verzeichnisses an bzw. ändert diesen.
CHCP Zeigt die aktive Codepagenummer an bzw. legt sie fest.
CHDIR Zeigt den Namen des aktuellen Verzeichnisses an bzw. ändert es.
CHKDSK Überprüft einen Datenträger und zeigt einen Statusbericht an.
CHKNTFS Zeigt die Überprüfung des Datenträgers beim Start an bzw. verändert sie.
CLS Löscht den Bildschirminhalt.
CMD Startet eine neue Instanz des Windows-Befehlsinterpreters.
COLOR Legt die Hintergrund- und Vordergrundfarben für die Konsole fest.
COMP Vergleicht den Inhalt zweier Dateien oder Sätze von Dateien.
COMPACT Zeigt die Komprimierung von Dateien auf NTFS-Partitionen an bzw. ändert sie.
CONVERT Konvertiert FAT-Volumes in NTFS. Das aktuelle Laufwerk kann nicht konvertiert werden.
COPY Kopiert eine oder mehrere Dateien an eine andere Stelle.
DATE Zeigt das Datum an bzw. legt es fest.
DEL Löscht eine oder mehrere Dateien.
DIR Listet die Dateien und Unterverzeichnisse eines Verzeichnisses auf.
DISKPART Zeigt Eigenschaften von Festplattenpartitionen an bzw. konfiguriert sie.
DOSKEY Bearbeitet Befehlseingaben, erinnert Windows-Befehle und erstellt Macros.
DRIVERQUERY Zeigt den aktuellen Gerätetreiberstatus und die Eigenschaften an.
ECHO Zeigt Meldungen an bzw. schaltet die Befehlsanzeige ein oder aus.
ENDLOCAL Beendet den lokalen Gültigkeitsbereich von Umgebungsänderungen in einer Batchdatei.
ERASE Löscht eine oder mehrere Dateien.
EXIT Beendet das Programm CMD.EXE (Befehlsinterpreter).
FC Vergleicht zwei oder mehr Sätze von Dateien und zeigt die Unterschiede an.
FIND Sucht eine Zeichenkette in einer oder mehreren Datei(en).
FINDSTR Sucht Zeichenketten in Dateien.
FOR Führt einen angegebenen Befehl für jede Datei in einem Dateiensatz aus.
FORMAT Formatiert einen Datenträger für die Verwendung mit Windows.
FSUTIL Zeigt die Dateisystemeigenschaften an bzw konfiguriert sie.
FTYPE Zeigt die Dateitypen an, die bei den Zuordnungen für die entsprechenden Dateierweiterungen verwendet werden bzw. ändert sie.
GOTO Setzt den Windows-Befehlsinterpreter auf eine markierte Zeile in einem Batchprogramm.
GPRESULT Zeigt Gruppenrichtlinieninformationen für Computer oder Benutzer an.
GRAFTABL Ermöglicht Windows, Sonderzeichen im  Grafikmodus anzuzeigen.
HELP Zeigt Hilfeinformationen zu Windows-Befehlen an.
ICACLS Anzeigen, Ändern, Sichern oder Wiederherstellen von ACLs füŘr Dateien und Verzeichnisse.
IF Verarbeitet Ausdrücke in einer Batchdatei abhängig von Bedingungen.
LABEL Erstellt, ändert oder löscht die Bezeichnung eines Volumes.
MD Erstellt ein Verzeichnis.
MKDIR Erstellt ein Verzeichnis.
MKLINK Erstellt symbolische Links und feste Links.
MODE Konfiguriert ein Systemgerät.
MORE Zeigt Ausgabe auf dem Bildschirm seitenweise an.
MOVE Verschiebt ein oder mehrere Dateien von einem Verzeichnis in ein anderes.
OPENFILES Zeigt Dateien, die von Remotebenutzern zur Dateifreigabe geöffnet wurden an.
PATH Legt den Suchpfad für ausführbare Dateien fest o. zeigt ihn an.
PAUSE Hält die Ausführung einer Batchdatei an und zeigt e. Meldung an.
POPD Wechselt zu dem Verzeichnis, das durch  PUSHD gespeichert wurde.
PRINT Druckt eine Textdatei.
PROMPT Ändert die Eingabeaufforderung.
PUSHD Speichert das aktuelle Verzeichnis, und wechselt zu einem anderen Verzeichnis.
RD Entfernt ein Verzeichnis.
RECOVER Stellt lesbare Daten von einem beschädigten Datenträger wieder her.
REM Leitet Kommentare in einer Batchdatei bzw. CONFIG.SYS ein.
REN Benennt eine Datei bzw. Dateien um.
RENAME Bennent eine Datei bzw. Dateien um.
REPLACE Ersetzt Dateien.
RMDIR Löscht ein Verzeichnis.
ROBOCOPY Erweitertes Hilfsprogramm zum Kopieren von Dateien und Verzeichnisstrukturen
SET Setzt oder löscht die Umgebungsvariablen bzw. zeigt sie an.
SETLOCAL Startet die Begrenzung des Gültigkeitsbereiches von Umgebungsänderungen in einer Batchdatei.
SC Zeigt  Dienste (=Hintergrundprozess) an bzw. konfiguriert sie.
SCHTASKS Erstellt Zeitpläne für auf dem Computer auszuführende Befehle und Programme.
SHIFT Verändert die Position ersetzbarer Parameter in Batchdateien.
SHUTDOWN Ermöglicht lokales oder ferngesteuertes Herunterfahren des Computers.
SORT Sortiert die Eingabe.
START Startet ein eigenes Fenster, um ein bestimmtes Programm oder einen Befehl auszuführen.
SUBST Ordnet einen Pfad einem Laufwerkbuchstaben zu.
SYSTEMINFO Zeigt computerspezifische Eigenschaften und Konfigurationen an.
TASKLIST Zeigt alle zurzeit laufenden Aufgaben inklusive der Dienste an.
TASKKILL Bricht einen laufenden Prozess oder eine Anwendung ab oder beendet ihn bzw. sie.
TIME Zeigt die Systemzeit an bzw. legt sie fest.
TITLE Bestimmt den Fenstertitel des Eingabeaufforderungsfensters.
TREE Zeigt die Ordnerstruktur eines Laufwerks oder Pfads grafisch an.
TYPE Zeigt den Inhalt einer Textdatei an.
VER Zeigt die Windows-Version an.
VERIFY Legt fest, ob das ordnungsgemäße Schreiben von Dateien auf den Datenträger überprüft werden soll.
VOL Zeigt die Volumebezeichnung und die Seriennummer des Datenträgers an.
XCOPY Kopiert Dateien und Verzeichnisstrukturen.
WMIC Zeigt WMI-Informationen in der interaktiven Befehlsshell an.
Zur Werkzeugleiste springen