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.






Siehe auch




Inhaltsverzeichnis