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

ASSOCZeigt Dateierweiterungszuordnungen an bzw. ändert sie.
ATTRIBZeigt Dateiattribute an bzw. ändert sie.
BREAKSchaltet die erweiterte Überprüfung für STRG+C ein bzw. aus.
BOOTCFGLegt Eigenschaften zur Steuerung des Startladenvorganges in der  Startdatenbank fest.
CACLSZeigt Datei-ACLs (Access Control List) an bzw. ändert sie.
CALLRuft eine Batchdatei von einer anderen Batchdatei aus auf.
CDZeigt den Namen des aktuellen Verzeichnisses an bzw. ändert diesen.
CHCPZeigt die aktive Codepagenummer an bzw. legt sie fest.
CHDIRZeigt den Namen des aktuellen Verzeichnisses an bzw. ändert es.
CHKDSKÜberprüft einen Datenträger und zeigt einen Statusbericht an.
CHKNTFSZeigt die Überprüfung des Datenträgers beim Start an bzw. verändert sie.
CLSLöscht den Bildschirminhalt.
CMDStartet eine neue Instanz des Windows-Befehlsinterpreters.
COLORLegt die Hintergrund- und Vordergrundfarben für die Konsole fest.
COMPVergleicht den Inhalt zweier Dateien oder Sätze von Dateien.
COMPACTZeigt die Komprimierung von Dateien auf NTFS-Partitionen an bzw. ändert sie.
CONVERTKonvertiert FAT-Volumes in NTFS. Das aktuelle Laufwerk kann nicht konvertiert werden.
COPYKopiert eine oder mehrere Dateien an eine andere Stelle.
DATEZeigt das Datum an bzw. legt es fest.
DELLöscht eine oder mehrere Dateien.
DIRListet die Dateien und Unterverzeichnisse eines Verzeichnisses auf.
DISKPARTZeigt Eigenschaften von Festplattenpartitionen an bzw. konfiguriert sie.
DOSKEYBearbeitet Befehlseingaben, erinnert Windows-Befehle und erstellt Macros.
DRIVERQUERYZeigt den aktuellen Gerätetreiberstatus und die Eigenschaften an.
ECHOZeigt Meldungen an bzw. schaltet die Befehlsanzeige ein oder aus.
ENDLOCALBeendet den lokalen Gültigkeitsbereich von Umgebungsänderungen in einer Batchdatei.
ERASELöscht eine oder mehrere Dateien.
EXITBeendet das Programm CMD.EXE (Befehlsinterpreter).
FCVergleicht zwei oder mehr Sätze von Dateien und zeigt die Unterschiede an.
FINDSucht eine Zeichenkette in einer oder mehreren Datei(en).
FINDSTRSucht Zeichenketten in Dateien.
FORFührt einen angegebenen Befehl für jede Datei in einem Dateiensatz aus.
FORMATFormatiert einen Datenträger für die Verwendung mit Windows.
FSUTILZeigt die Dateisystemeigenschaften an bzw konfiguriert sie.
FTYPEZeigt die Dateitypen an, die bei den Zuordnungen für die entsprechenden Dateierweiterungen verwendet werden bzw. ändert sie.
GOTOSetzt den Windows-Befehlsinterpreter auf eine markierte Zeile in einem Batchprogramm.
GPRESULTZeigt Gruppenrichtlinieninformationen für Computer oder Benutzer an.
GRAFTABLErmöglicht Windows, Sonderzeichen im  Grafikmodus anzuzeigen.
HELPZeigt Hilfeinformationen zu Windows-Befehlen an.
ICACLSAnzeigen, Ändern, Sichern oder Wiederherstellen von ACLs füŘr Dateien und Verzeichnisse.
IFVerarbeitet Ausdrücke in einer Batchdatei abhängig von Bedingungen.
LABELErstellt, ändert oder löscht die Bezeichnung eines Volumes.
MDErstellt ein Verzeichnis.
MKDIRErstellt ein Verzeichnis.
MKLINKErstellt symbolische Links und feste Links.
MODEKonfiguriert ein Systemgerät.
MOREZeigt Ausgabe auf dem Bildschirm seitenweise an.
MOVEVerschiebt ein oder mehrere Dateien von einem Verzeichnis in ein anderes.
OPENFILESZeigt Dateien, die von Remotebenutzern zur Dateifreigabe geöffnet wurden an.
PATHLegt den Suchpfad für ausführbare Dateien fest o. zeigt ihn an.
PAUSEHält die Ausführung einer Batchdatei an und zeigt e. Meldung an.
POPDWechselt zu dem Verzeichnis, das durch  PUSHD gespeichert wurde.
PRINTDruckt eine Textdatei.
PROMPTÄndert die Eingabeaufforderung.
PUSHDSpeichert das aktuelle Verzeichnis, und wechselt zu einem anderen Verzeichnis.
RDEntfernt ein Verzeichnis.
RECOVERStellt lesbare Daten von einem beschädigten Datenträger wieder her.
REMLeitet Kommentare in einer Batchdatei bzw. CONFIG.SYS ein.
RENBenennt eine Datei bzw. Dateien um.
RENAMEBennent eine Datei bzw. Dateien um.
REPLACEErsetzt Dateien.
RMDIRLöscht ein Verzeichnis.
ROBOCOPYErweitertes Hilfsprogramm zum Kopieren von Dateien und Verzeichnisstrukturen
SETSetzt oder löscht die Umgebungsvariablen bzw. zeigt sie an.
SETLOCALStartet die Begrenzung des Gültigkeitsbereiches von Umgebungsänderungen in einer Batchdatei.
SCZeigt  Dienste (=Hintergrundprozess) an bzw. konfiguriert sie.
SCHTASKSErstellt Zeitpläne für auf dem Computer auszuführende Befehle und Programme.
SHIFTVerändert die Position ersetzbarer Parameter in Batchdateien.
SHUTDOWNErmöglicht lokales oder ferngesteuertes Herunterfahren des Computers.
SORTSortiert die Eingabe.
STARTStartet ein eigenes Fenster, um ein bestimmtes Programm oder einen Befehl auszuführen.
SUBSTOrdnet einen Pfad einem Laufwerkbuchstaben zu.
SYSTEMINFOZeigt computerspezifische Eigenschaften und Konfigurationen an.
TASKLISTZeigt alle zurzeit laufenden Aufgaben inklusive der Dienste an.
TASKKILLBricht einen laufenden Prozess oder eine Anwendung ab oder beendet ihn bzw. sie.
TIMEZeigt die Systemzeit an bzw. legt sie fest.
TITLEBestimmt den Fenstertitel des Eingabeaufforderungsfensters.
TREEZeigt die Ordnerstruktur eines Laufwerks oder Pfads grafisch an.
TYPEZeigt den Inhalt einer Textdatei an.
VERZeigt die Windows-Version an.
VERIFYLegt fest, ob das ordnungsgemäße Schreiben von Dateien auf den Datenträger überprüft werden soll.
VOLZeigt die Volumebezeichnung und die Seriennummer des Datenträgers an.
XCOPYKopiert Dateien und Verzeichnisstrukturen.
WMICZeigt WMI-Informationen in der interaktiven Befehlsshell an.

Franz Fiala

Präsident Clubcomputer / Herausgeber PCNEWS bei ClubComputer.at
Franz ist pensionierter HTL Lehrer (TGM), Präsident von ClubComputer, Herausgeber der Clubzeitung PCNEWS und betreut unser Clubtelefon und Internet Support. Er ist leidenschaftlicher Rapid Wien Fan.

Letzte Artikel von Franz Fiala (Alle anzeigen)