Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
PowerShell ist eine Befehlszeilenshell und eine Skriptsprache, die für die Automatisierung verwendet wird. Ähnlich wie bei anderen Shells, z bash . B. unter Linux oder der Windows-Befehlsshell (cmd.exe), können Sie mit PowerShell alle befehle ausführen, die auf Ihrem System verfügbar sind, nicht nur PowerShell-Befehle.
Typen von Befehlen
Für jede Shell in jedem Betriebssystem gibt es drei Arten von Befehlen:
Shell-Schlüsselwörter sind Teil der Skriptsprache der Shell.
- Beispiele für
bashSchlüsselwörter sind:if,then,else,elifundfi. - Beispiele für
cmd.exeSchlüsselwörter sind:dir,copy,move,ifundecho. - Beispiele für PowerShell-Schlüsselwörter sind:
for,foreach,try,catchundtrap.
Shell-Sprachstichwörter können nur in der Laufzeitumgebung der Shell verwendet werden. Es gibt keine ausführbare Datei außerhalb der Shell, die die Funktionalität des Schlüsselworts bereitstellt.
- Beispiele für
betriebssystemeigene Befehle sind ausführbare Dateien, die im Betriebssystem installiert sind. Die ausführbaren Dateien können über jede Befehlszeilenshell wie PowerShell ausgeführt werden. Dazu gehören Skriptdateien, die auf andere Shells angewiesen sind, um ordnungsgemäß zu funktionieren. Wenn Sie beispielsweise ein Windows-Batchskript (
.cmdDatei) in PowerShell ausführen, führt PowerShellcmd.exeaus und übergibt die Batchdatei zur Ausführung.umgebungsspezifische Shellbefehle sind Befehle in externen Dateien definiert, die nur innerhalb der Laufzeitumgebung der Shell verwendet werden können. Dazu gehören Skripts, Funktionen und Module, die der Shell-Laufzeit Befehle hinzufügen. In PowerShell werden diese von einem Modul hinzugefügten Befehle als Cmdlets (ausgesprochen "Command-lets") bezeichnet.
Ausführen systemeigener Befehle
Jeder systemeigene Befehl kann über die PowerShell-Befehlszeile ausgeführt werden. In der Regel führen Sie den Befehl genau wie in bash oder cmd.exeaus. Das folgende Beispiel zeigt das Ausführen des befehls grep in bash unter Ubuntu Linux.
sdwheeler@circumflex:~$ grep sdwheeler /etc/passwd
sdwheeler:x:1000:1000:,,,:/home/sdwheeler:/bin/bash
sdwheeler@circumflex:~$ pwsh
PowerShell 7.2.6
Copyright (c) Microsoft Corporation.
https://aka.ms/powershell
Type 'help' to get help.
Nach dem Starten von PowerShell unter Ubuntu können Sie denselben Befehl über die PowerShell-Befehlszeile ausführen:
PS /home/sdwheeler> grep sdwheeler /etc/passwd
sdwheeler:x:1000:1000:,,,:/home/sdwheeler:/bin/bash
Übergeben von Argumenten an native Befehle
Die meisten Shells umfassen Features für die Verwendung von Variablen, die Auswertung von Ausdrücken und das Behandeln von Zeichenfolgen. Allerdings werden diese Aufgaben von jeder Shell anders ausgeführt. In PowerShell beginnen alle Parameter mit einem Bindestrich (-) Zeichen. In cmd.exe verwenden die meisten Befehlsparameter einen Schrägstrich (/). Andere Befehlszeilentools können Leerzeichen, Bindestriche, Doppeltstriche (--) verwenden.
Jede Shell verfügt über eine eigene Methode zum Behandeln und Auswerten von Zeichenfolgen in der Befehlszeile. Wenn Sie systemeigene Befehle in PowerShell ausführen, die erwarten, dass Zeichenfolgen auf eine bestimmte Weise zitiert werden, müssen Sie möglicherweise anpassen, wie Sie diese Zeichenfolgen übergeben.
Weitere Informationen finden Sie in den folgenden Artikeln:
PowerShell 7.2 führte ein neues experimentelles Feature PSNativeCommandArgumentPassing ein, das die systemeigene Befehlsbehandlung verbessert hat. Weitere Informationen finden Sie unter $PSNativeCommandArgumentPassing.
Behandeln von Ausgaben und Fehlern
PowerShell verfügt auch über mehrere mehr Ausgabedatenströme als andere Shells. Die Shells bash und cmd.exe verfügen über stdout und stderr. PowerShell verfügt über sechs Ausgabestreams. Weitere Informationen finden Sie unter about_Redirection und about_Output_Streams.
Im Allgemeinen wird die von einem nativen Befehl an stdout gesendete Ausgabe an den Erfolg-Stream in PowerShell gesendet. Von einem nativen Befehl an stderr gesendete Ausgaben werden an den Fehler-Stream in PowerShell gesendet.
Wenn ein systemeigener Befehl einen Exitcode ungleich null hat, wird $? auf $false gesetzt. Wenn der Ausgangscode null ist, wird $? auf $truefestgelegt.
PowerShell 7.2 hat dieses Verhalten jedoch geändert. Fehlereinträge, die von systemeigenen Befehlen umgeleitet werden, z. B. bei Verwendung von Umleitungsoperatoren (2>&1), werden nicht in die $Error Variable von PowerShell geschrieben, und die Einstellungsvariable $ErrorActionPreference wirkt sich nicht auf die umgeleitete Ausgabe aus.
Viele native Befehle schreiben in stderr als alternativen Stream für weitere Informationen. Dieses Verhalten kann beim Durchsehen von Fehlern in PowerShell Verwirrung verursachen, und die zusätzlichen Ausgabeinformationen können verloren gehen, wenn $ErrorActionPreference auf einen Zustand festgelegt ist, der die Ausgabe unterdrückt.
PowerShell 7.3 hat ein neues experimentelles Feature PSNativeCommandErrorActionPreference hinzugefügt, mit dem Sie steuern können, wie Sie Nicht-Null-Exitcodes von systemeigenen Befehlen behandeln. Weitere Informationen finden Sie unter $PSNativeCommandUseErrorActionPreference.
Ausführen von PowerShell-Befehlen
Wie bereits erwähnt, werden PowerShell-Befehle als Cmdlets bezeichnet. Cmdlets werden in PowerShell-Modulen gesammelt, die bei Bedarf geladen werden können. Cmdlets können in jeder kompilierten .NET-Sprache oder mithilfe der PowerShell-Skriptsprache selbst geschrieben werden.
PowerShell-Befehle, die andere Befehle ausführen
Mit dem PowerShell--Aufrufoperator (&) können Sie Befehle ausführen, die in Variablen gespeichert sind und durch Zeichenfolgen oder Skriptblöcke dargestellt werden. Sie können den Operator verwenden, um einen beliebigen systemeigenen Befehl oder PowerShell-Befehl auszuführen. Dies ist in einem Skript hilfreich, wenn Sie die Befehlszeilenparameter für einen systemeigenen Befehl dynamisch erstellen müssen. Weitere Informationen finden Sie unter dem Aufrufoperator.
Das cmdlet Start-Process kann verwendet werden, um systemeigene Befehle auszuführen, sollte jedoch nur verwendet werden, wenn Sie steuern müssen, wie der Befehl ausgeführt wird. Das Cmdlet verfügt über Parameter zur Unterstützung der folgenden Szenarien:
- Ausführen eines Befehls mit unterschiedlichen Anmeldeinformationen
- Ausblenden des konsolenfensters, das vom neuen Prozess erstellt wurde
- Umleiten der Streams stdin, stdout und stderr
- Verwenden eines anderen Arbeitsverzeichnisses für den Befehl
Im folgenden Beispiel wird der systemeigene Befehl sort.exe mit umgeleiteten Eingabe- und Ausgabedatenströmen ausgeführt.
$processOptions = @{
FilePath = "sort.exe"
RedirectStandardInput = "TestSort.txt"
RedirectStandardOutput = "Sorted.txt"
RedirectStandardError = "SortError.txt"
UseNewEnvironment = $true
}
Start-Process @processOptions
Weitere Informationen finden Sie unter Start-Process.
Unter Windows führt das Cmdlet Invoke-Item die Standardaktion für das angegebene Element aus. Sie führt beispielsweise eine ausführbare Datei aus oder öffnet eine Dokumentdatei mithilfe der Anwendung, die dem Dokumentdateityp zugeordnet ist. Die Standardaktion hängt vom Typ des Elements und vom PowerShell-Anbieter ab, der Zugriff auf das Element ermöglicht.
Im folgenden Beispiel wird das PowerShell-Quellcode-Repository in Ihrem Standardwebbrowser geöffnet.
Invoke-Item https://github.com/PowerShell/PowerShell
Weitere Informationen finden Sie unter Invoke-Item.