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

-Command

Führt die angegebenen Befehle (und alle Parameter) so aus, als ob sie an der PowerShell-Eingabeaufforderung eingegeben wurden, und beendet sie dann, es sei denn, der NoExit Parameter ist angegeben.

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 er sich genau so, als ob Sie ihn an einer typischen PowerShell-Eingabeaufforderung eingegeben hätten, wobei der Inhalt des Skriptblocks wieder an Sie ausgegeben wird.

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 -, wird der Befehlstext 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

Der Prozessendecode wird durch den Status des letzten (ausgeführten) Befehls innerhalb des Skriptblocks 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 1einen anderen Exitcode festlegt, wird dieser Beendigungscode für Prozessausgangscode konvertiert 1 . Um den spezifischen Beendigungscode beizubehalten, fügen Sie exit $LASTEXITCODE der Befehlszeichenfolge oder dem Skriptblock hinzu.

Weitere Informationen finden Sie in $LASTEXITCODEabout_Automatic_Variables.

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.

-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.

-Datei - | <Filepath><Args>

Wenn der Wert der Datei lautet -, wird der Befehlstext aus der Standardeingabe gelesen. Wird powershell -File - ohne umgeleitete Standardeingabe ausgeführt, wird eine normale Sitzung gestartet. Dies ist identisch mit der Angabe des Dateiparameters überhaupt.

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. File 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.

Parameter, die an das Skript übergeben werden, werden als Zeichenfolgenliterale übergeben (nach der Interpretation durch die aktuelle Shell). Wenn Sie sich beispielsweise in cmd.exe befinden und 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 dazu, dass das Skript die Literalzeichenfolge $env:windir empfängt, da es 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 es 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: powershell.exe -File %~dp0test.ps1 -TestParam %windir% Wenn Sie stattdessen verwendet haben .\test.ps1, löst PowerShell einen Fehler aus, da er den Literalpfad nicht finden kann. .\test.ps1

Wenn der Wert von File ein Dateipfad ist, muss "File" der letzte Parameter im Befehl sein, da alle Zeichen, die nach dem Dateinamen des Dateiparameters eingegeben wurden, als Skriptdateipfad interpretiert werden, gefolgt von den Skriptparametern.

Sie können die Skriptparameter und -werte in den Wert des File-Parameters einschließen. 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.

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 die Skriptdatei mit einem exit Befehl beendet wird, wird der Prozessendecode auf das numerische Argument festgelegt, das mit dem exit Befehl verwendet wird. Bei normaler Beendigung ist der Ausgangscode immer 0.

Weitere Informationen finden Sie in $LASTEXITCODEabout_Automatic_Variables.

-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.

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