about_PowerShell_exe
Kurze Beschreibung
Erläutert die Verwendung der powershell.exe
Befehlszeilenschnittstelle. Zeigt die Befehlszeilenparameter an und beschreibt die Syntax.
Lange Beschreibung
Informationen zu den Befehlszeilenoptionen für PowerShell 7 finden Sie unter about_Pwsh.
SYNTAX
PowerShell[.exe]
[-PSConsoleFile <file> | -Version <version>]
[-NoLogo]
[-NoExit]
[-Sta]
[-Mta]
[-NoProfile]
[-NonInteractive]
[-InputFormat {Text | XML}]
[-OutputFormat {Text | XML}]
[-WindowStyle <style>]
[-EncodedArguments <Base64EncodedArguments>]
[-EncodedCommand <Base64EncodedCommand>]
[-ConfigurationName <string>]
[-File - | <filePath> <args>]
[-ExecutionPolicy <ExecutionPolicy>]
[-Command - | { <script-block> [-args <arg-array>] }
| { <string> [<CommandParameters>] } ]
PowerShell[.exe] -Help | -? | /?
Parameter
Bei allen Parametern wird die Groß-/Kleinschreibung nicht beachtet.
-Datei - | <filePath><Args>
Der Wert der Datei kann ein Dateipfad und optionale Parameter sein -
. Wenn der Wert der Datei lautet -
, werden Befehle aus der Standardeingabe gelesen.
Wenn der Wert von Datei ein Dateipfad ist, wird das Skript im lokalen Bereich ("dot-sourced") der neuen Sitzung ausgeführt, sodass die funktionen und Variablen, die das Skript erstellt, in dieser neuen Sitzung verfügbar sind. Geben Sie den Skriptdateipfad und alle Parameter ein. Die Datei muss der letzte Parameter im Befehl sein. Alle Werte, die nach dem File-Parameter eingegeben wurden, werden als Skriptdateipfad und Parameter interpretiert, die an dieses Skript übergeben werden. Beispiel: -File .\Get-Script.ps1 -Domain Central
Die Switch-Parameter eines Skripts werden in der Regel entweder einbezogen oder ausgelassen.
Der folgende Befehl verwendet beispielsweise den Parameter "Alle " der Get-Script.ps1
Skriptdatei: -File .\Get-Script.ps1 -All
In seltenen Fällen müssen Sie möglicherweise einen booleschen Wert für einen Parameter angeben.
Es ist nicht möglich, einen expliziten booleschen Wert für einen Switch-Parameter zu übergeben, wenn ein Skript auf diese Weise ausgeführt wird. Diese Einschränkung wurde in PowerShell 6 (pwsh.exe
) entfernt.
Parameter, die an das Skript übergeben werden, werden als Zeichenfolgenliterale übergeben (nach der Interpretation durch die aktuelle Shell). Wenn Sie cmd.exe
beispielsweise einen Umgebungsvariablenwert übergeben möchten, verwenden Sie die cmd.exe
Syntax: powershell.exe -File .\test.ps1 -TestParam %windir%
Im Gegensatz dazu führt die Ausführung powershell.exe -File .\test.ps1 -TestParam $env:windir
in cmd.exe
dem Skript, das die Literalzeichenfolge $env:windir
empfängt, da sie keine besondere Bedeutung für die aktuelle cmd.exe
Shell hat. Der $env:windir
Stil des Umgebungsvariablenverweises kann in einem Command-Parameter verwendet werden, da er als PowerShell-Code interpretiert wird.
Wenn Sie denselben Befehl aus einem Batchskript ausführen möchten, verwenden %~dp0
Sie anstelle oder $PSScriptRoot
.\
zum Darstellen des aktuellen Ausführungsverzeichnisses: pwsh -File %~dp0test.ps1 -TestParam %windir%
Wenn Sie stattdessen verwenden .\test.ps1
, löst PowerShell einen Fehler aus, da er den Literalpfad nicht finden kann. .\test.ps1
Hinweis
Der File-Parameter kann Skripts nicht mit einem Parameter unterstützen, der ein Array von Argumentwerten erwartet. Dies ist leider eine Einschränkung, wie ein systemeigener Befehl Argumentwerte abruft. Wenn Sie eine systemeigene ausführbare Datei (z powershell
. B. oder pwsh
) aufrufen, wissen Sie nicht, was mit einem Array zu tun ist, sodass sie als Zeichenfolge übergeben wird.
Wenn der Wert der Datei lautet -
, werden Befehle aus der Standardeingabe gelesen.
Wird powershell -File -
ohne umgeleitete Standardeingabe ausgeführt, wird eine normale Sitzung gestartet. Dies ist identisch mit der Angabe des File
Parameters überhaupt nicht. Beim Lesen von Standardeingaben werden die Eingabeanweisungen jeweils jeweils so ausgeführt, als ob sie an der PowerShell-Eingabeaufforderung eingegeben wurden. Wenn eine Anweisung nicht richtig analysiert wird, wird die Anweisung nicht ausgeführt. Der Prozessendecode wird durch den Status des letzten (ausgeführten) Befehls bestimmt. Bei erfolgreicher Ausführung ist der Beendigungscode immer 0
. Wenn die Skriptdatei mit einem exit
Befehl beendet wird, wird der Prozessendecode auf das numerische Argument festgelegt, das mit dem exit
Befehl verwendet wird.
Ähnlich wie -Command
, wenn ein Skriptbeendfehler auftritt, wird der Beendigungscode auf 1
festgelegt. Anders als bei -Command
, wenn die Ausführung mit STRG+C unterbrochen wird, lautet 0
der Ausgangscode . Weitere Informationen finden Sie in $LASTEXITCODE
about_Automatic_Variables.
-Command
Der Wert von Command kann , ein Skriptblock oder eine Zeichenfolge sein -
. Wenn der Wert von Command lautet -
, wird der Befehlstext aus der Standardeingabe gelesen.
Der Command-Parameter akzeptiert nur einen Skriptblock für die Ausführung, wenn er den an Command übergebenen Wert als ScriptBlock-Typ erkennen kann. Dies ist nur möglich, wenn sie von einem anderen PowerShell-Host ausgeführt wird powershell.exe
. Der ScriptBlock-Typ kann in einer vorhandenen Variablen enthalten sein, von einem Ausdruck zurückgegeben oder vom PowerShell-Host als literaler Skriptblock analysiert werden, der in geschweifte Klammern () eingeschlossen ist,{}
bevor er an powershell.exe
.
powershell -Command {Get-WinEvent -LogName security}
In cmd.exe
, gibt es keine Solche wie einen Skriptblock (oder ScriptBlock-Typ), sodass der an Command übergebene Wert immer eine Zeichenfolge ist. Sie können einen Skriptblock innerhalb der Zeichenfolge schreiben, aber anstatt ausgeführt zu werden, verhält es sich genau so, als ob Sie ihn an einer typischen PowerShell-Eingabeaufforderung eingegeben haben, indem Sie den Inhalt des Skriptblocks wieder in Sie drucken.
Eine an Command übergebene Zeichenfolge wird weiterhin als PowerShell-Code ausgeführt, sodass die geschweiften Klammern des Skriptblocks häufig nicht an erster Stelle benötigt werden, wenn sie von cmd.exe
. Zum Ausführen eines inlineskriptblocks, der in einer Zeichenfolge definiert ist, kann der Aufrufoperator &
verwendet werden:
powershell.exe -Command "& {Get-WinEvent -LogName security}"
Wenn der Wert von Command eine Zeichenfolge ist, muss Command der letzte Parameter für pwsh sein, da alle folgenden Argumente als Teil des auszuführenden Befehls interpretiert werden.
Wenn die Ergebnisse innerhalb einer vorhandenen PowerShell-Sitzung aufgerufen werden, werden die Ergebnisse als deserialisierte XML-Objekte an die übergeordnete Shell und nicht als Liveobjekte zurückgegeben. Bei anderen Shells werden die Ergebnisse als Zeichenfolgen zurückgegeben.
Wenn der Wert von Command lautet -
, werden die Befehle aus der Standardeingabe gelesen. Sie müssen die Standardeingabe umleiten, wenn Sie den Command-Parameter mit Standardeingabe verwenden. Zum Beispiel:
@'
"in"
"hi" |
% { "$_ there" }
"out"
'@ | powershell -NoProfile -Command -
Dieses Beispiel erzeugt die folgende Ausgabe:
in
hi there
out
Beim Lesen von Standardeingaben wird die Eingabe analysiert und jeweils eine Anweisung ausgeführt, als ob sie an der PowerShell-Eingabeaufforderung eingegeben wurden. Wenn der Eingabecode nicht richtig analysiert wird, wird die Anweisung nicht ausgeführt. Sofern Sie den -NoExit
Parameter nicht verwenden, wird die PowerShell-Sitzung beendet, wenn keine Eingabe mehr zum Lesen von Standardeingaben vorhanden ist.
Der Prozessendecode wird durch den Status des letzten (ausgeführten) Befehls innerhalb der Eingabe bestimmt. Der Beendigungscode ist 0
der Zeitpunkt $?
$true
oder 1
der Zeitpunkt.$false
$?
Wenn es sich bei dem letzten Befehl um ein externes Programm oder ein PowerShell-Skript handelt, das explizit einen anderen Exitcode als 0
oder 1
einen anderen Exitcode festlegt, wird dieser Beendigungscode für Prozessausgangscode konvertiert 1
. Ebenso wird der Wert 1 zurückgegeben, wenn ein Skript-Endingfehler (Runspace-Terminating) auftritt, z. B. ein throw
oder -ErrorAction Stop
, oder wenn die Ausführung mit STRG+C unterbrochen wird.
Um den spezifischen Beendigungscode beizubehalten, fügen Sie exit $LASTEXITCODE
der Befehlszeichenfolge oder dem Skriptblock hinzu. Weitere Informationen finden Sie in $LASTEXITCODE
about_Automatic_Variables.
-ConfigurationName-Zeichenfolge <>
Gibt einen Konfigurationsendpunkt an, in dem PowerShell ausgeführt wird. Dies kann jeder auf dem lokalen Computer registrierte Endpunkt sein, einschließlich der standardmäßigen PowerShell-Remotingendpunkte oder eines benutzerdefinierten Endpunkts mit bestimmten Benutzerrollenfunktionen.
-EncodedArguments <Base64EncodedArguments>
Akzeptiert ein Base64-codiertes Zeichenfolgenbefehlsargument. Verwenden Sie diesen Parameter, um Argumente zu übermitteln, die komplexe, geschachtelte Quoten erfordern. Die Base64-Darstellung muss eine UTF-16LE-codierte Zeichenfolge sein.
-EncodedCommand <Base64EncodedCommand>
Akzeptiert eine „base-64“-codierte Zeichenfolgenversion eines Befehls. Verwenden Sie diesen Parameter, um Befehle an PowerShell zu übermitteln, die komplexe Anführungszeichen oder geschweifte Klammern erfordern. Die Zeichenfolge muss mit UTF-16LE-Zeichencodierung formatiert werden.
-ExecutionPolicy ExecutionPolicy <>
Legt die Standardausführungsrichtlinie für die aktuelle Sitzung fest und speichert sie in der $env:PSExecutionPolicyPreference
Umgebungsvariable. Dieser Parameter ändert nicht die PowerShell-Ausführungsrichtlinie, die in der Registrierung festgelegt ist. Weitere Informationen zu PowerShell-Ausführungsrichtlinien (einschließlich einer Liste gültiger Werte) finden Sie unter about_Execution_Policies.
-InputFormat {Text | XML}
Beschreibt das Format der Daten, die an PowerShell übermittelt werden. Gültige Werte sind Text
(Textzeichenfolgen) oder XML
(serialisiertes CLIXML-Format).
-Mta
Startet PowerShell mit einem Multithread-Apartment. Dieser Parameter wird in Windows PowerShell 3.0 eingeführt. In PowerShell 2.0 stellt Multithread-Apartment (MTA) die Standardeinstellung dar. In PowerShell 3.0 ist Singlethread-Apartment (STA) die Standardeinstellung.
-NoExit
Nach dem Ausführen der Startbefehle erfolgt kein Beenden.
-NonInteractive
Dieser Schalter wird verwendet, um Sitzungen zu erstellen, die keine Benutzereingabe erfordern sollten. Dies ist nützlich für Skripts, die in geplanten Aufgaben oder CI/CD-Pipelines ausgeführt werden. Alle Versuche, interaktive Features zu verwenden, z Read-Host
. B. Bestätigungsaufforderungen, führen zu Beendigungsfehlern von Anweisungen und nicht zum Hängen.
-NoLogo
Blendet die Copyrightinformationen beim Start aus.
-NoProfile
Das PowerShell-Profil wird nicht geladen.
-OutputFormat {Text | XML}
Bestimmt, wie die Ausgabe von PowerShell formatiert ist. Gültige Werte sind Text
(Textzeichenfolgen) oder XML
(serialisiertes CLIXML-Format).
-PSConsoleFile <FilePath>
Lädt die angegebene PowerShell-Konsolendatei. Geben Sie den Pfad und Namen der Konsolendatei ein. Verwenden Sie zum Erstellen einer Konsolendatei das Cmdlet Export-Console in PowerShell.
-Sta
Startet PowerShell mit einem Singlethread-Apartment. In Windows PowerShell 2.0 ist Multithread-Apartment (MTA) die Standardeinstellung. In Windows PowerShell 3.0 ist Singlethread-Apartment (STA) die Standardeinstellung.
-Version <PowerShell-Version>
Startet die angegebene Version von PowerShell. Gültige Werte sind 2.0 und 3.0. Die Version, die Sie angeben, muss auf dem System installiert sein. Wenn Windows PowerShell 3.0 auf dem Computer installiert ist, ist "3.0" die Standardversion. Andernfalls ist "2.0" die Standardversion. Weitere Informationen finden Sie unter Installieren von PowerShell.
-WindowStyle-Fensterformatvorlage <>
Legt den Fensterstil für die Sitzung fest. Gültige Werte sind Normal
, Minimized
, Maximized
und Hidden
.
-Help, -?, /?
Zeigt Hilfe für PowerShell.exe
. Wenn Sie einen PowerShell.exe
Befehl in einer PowerShell-Sitzung eingeben, stellen Sie den Befehlsparametern einen Bindestrich (), nicht einen Schrägstrich (-
/
) voran. Sie können entweder einen Bindestrich oder einen Schrägstrich verwenden cmd.exe
.
ANMERKUNGEN
Problembehandlungshinweis: In PowerShell 2.0 schlägt das Starten einiger Programme aus der PowerShell-Konsole mit einem LastExitCode von 0xc0000142 fehl.
BEISPIELE
# Create a new PowerShell session and load a saved console file
PowerShell -PSConsoleFile sqlsnapin.psc1
# Create a new PowerShell V2 session with text input, XML output, and no logo
PowerShell -Version 2.0 -NoLogo -InputFormat text -OutputFormat XML
# Execute a PowerShell Command in a session
PowerShell -Command "Get-EventLog -LogName security"
# Run a script block in a session
PowerShell -Command {Get-EventLog -LogName security}
# An alternate way to run a command in a new session
PowerShell -Command "& {Get-EventLog -LogName security}"
# To use the -EncodedCommand parameter:
$command = "dir 'c:\program files' "
$bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
$encodedCommand = [Convert]::ToBase64String($bytes)
powershell.exe -encodedCommand $encodedCommand