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 Microsoft (deutsch)
- Tutorium (deutsch)
- Tutorium (zum Ausdrucken)
- Tutorium-2 (zum Ausdrucken)
- Supportseite (deutsch)
- Alle DOS und Powershell-Befehle (Excel)
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. |
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. |
Franz war pensionierter HTL Lehrer (TGM), Präsident von ClubComputer, Herausgeber der Clubzeitung PCNEWS und betreute unser Clubtelefon und Internet Support. Er war leidenschaftlicher Rapid Wien Fan. Er ist leider Anfang Jänner 2024 nach langer schwerer Krankheit verstorben.
Neueste Kommentare