Invoke-Expression
Führt Befehle oder Ausdrücke auf dem lokalen Computer aus.
Syntax
Invoke-Expression [-Command] <string> [<CommonParameters>]
Beschreibung
Mit dem Cmdlet "Invoke-Expression" wird eine angegebene Zeichenfolge als Befehl ausgewertet oder ausgeführt, und es gibt die Ergebnisse des Ausdrucks bzw. Befehls zurück. Ohne Invoke-Expression wird eine in der Befehlszeile gesendete Zeichenfolge unverändert zurückgegeben (als Echo angezeigt).
Parameter
-Command <string>
Gibt den auszuführenden Befehl oder Ausdruck an. Geben Sie den Befehl oder den Ausdruck ein, oder geben Sie eine Variable ein, die den Befehl oder den Ausdruck enthält. Der Command-Parameter ist erforderlich.
Erforderlich? |
true |
Position? |
1 |
Standardwert |
|
Pipelineeingaben akzeptieren? |
true (ByValue) |
Platzhalterzeichen akzeptieren? |
false |
<CommonParameters>
Dieses Cmdlet unterstützt die folgenden allgemeinen Parameter: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer und -OutVariable. Weitere Informationen finden Sie unter about_Commonparameters.
Eingaben und Ausgaben
Der Eingabetyp ist der Typ der Objekte, die über die Pipeline an das Cmdlet übergeben werden können. Der Rückgabetyp ist der Typ der Objekte, die das Cmdlet zurückgibt.
Eingaben |
System.String oder PSObject Sie können ein Objekt, das den Befehl darstellt, über die Pipeline an Invoke-Expression übergeben. Verwenden Sie die automatische Variable "$input", um die Eingabeobjekte im Befehl darzustellen. |
Ausgaben |
PSObject Gibt die vom aufgerufenen Befehl (der Wert des Command-Parameters) generierte Ausgabe zurück. |
Hinweise
– Ein Ausdruck ist eine Anweisung, die ausgewertet werden kann, und liefert ein Ergebnis, z. B. einen Windows PowerShell-Befehl.
– Treffen Sie angemessene Vorsichtsmaßnahmen, wenn Sie das Cmdlet "Invoke-Expression" in Skripts verwenden. Wenn Sie einen vom Benutzer eingegebenen Befehl mit Invoke-Expression ausführen, überprüfen Sie vor dem Ausführen, ob der Befehl sicher ist. Im Allgemeinen empfiehlt es sich, das Skript mit vordefinierten Eingabeoptionen zu entwerfen, statt die Freihandeingabe zuzulassen.
Beispiel 1
C:\PS>$command = "Get-Process"
C:\PS> $command
Get-Process
C:\PS> invoke-expression $command
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
296 4 1572 1956 20 0.53 1348 AdtAgent
270 6 1328 800 34 0.06 2396 alg
67 2 620 484 20 0.22 716 ati2evxx
1060 15 12904 11840 74 11.48 892 CcmExec
1400 33 25280 37544 223 38.44 2564 communicator
...
Beschreibung
-----------
In diesem Beispiel wird die Verwendung von Invoke-Expression zum Auswerten eines Ausdrucks veranschaulicht. Ohne Invoke-Expression wird der Ausdruck ausgegeben, jedoch nicht ausgewertet.
Im ersten Befehl wird der Variablen "$command" ein Wert von "Get-Process" (eine Zeichenfolge) zugewiesen.
Im zweiten Befehl werden die Auswirkungen der Eingabe des Variablennamens in der Befehlszeile veranschaulicht. Windows PowerShell zeigt die Zeichenfolge als Echo an.
Im dritten Befehl wird die Zeichenfolge mithilfe von Invoke-Expression ausgewertet.
Beispiel 2
C:\PS>invoke-expression -command "C:\ps-test\testscript.ps1"
C:\PS> "C:\ps-test\testscript.ps1" | invoke-expression
Beschreibung
-----------
In diesen Befehlen wird das Skript "TestScript.ps1" mithilfe von Invoke-Expression auf dem lokalen Computer ausgeführt. Die beiden Befehle sind äquivalent. Im ersten Befehl wird der auszuführende Befehl mit dem Command-Parameter angegeben. Im zweiten Befehl wird die Befehlszeichenfolge mit einem Pipelineoperator (|) an Invoke-Expression gesendet.
Beispiel 3
C:\PS>$cmd = 'get-process | where {$_.cpu -gt 1000}'
C:\PS> iex $command
Beschreibung
-----------
In diesem Beispiel wird eine Befehlszeichenfolge ausgeführt, die in der Variablen "$cmd" gespeichert ist.
Die Befehlszeichenfolge ist in einfache Anführungszeichen eingeschlossen, da sie die Variable "$_" enthält, die das aktuelle Objekt darstellt. Wenn sie in doppelte Anführungszeichen eingeschlossen ist, wird die Variable "$_" durch ihren Wert ersetzt, bevor sie in der $command-Zeichenfolge gespeichert wird.
Beispiel 4
C:\PS>$cmdlet_name = "get-eventlog"
C:\PS> $example_number = 1
C:\PS> $example_code = (get-help $cmdlet_name).examples.example[($example_number-1)].code
C:\PS> invoke-expression $example_code
Beschreibung
-----------
Mit diesem Befehl wird das erste Beispiel im Hilfethema zum Cmdlet "Get-EventLog" abgerufen und ausgeführt.
Um ein Beispiel eines anderen Cmdlets auszuführen, ändern Sie den Wert der Variablen "$cmdlet_name" in den Namen des Cmdlets. Ändern Sie darüber hinaus die Variable "$example_number" in die Beispielnummer, die Sie ausführen möchten. Der Befehl schlägt fehl, wenn die Beispielnummer ungültig ist.