Share via


Invoke-Expression

Führt Befehle oder Ausdrücke auf dem lokalen Computer aus.

Syntax

Invoke-Expression
      [-Command] <String>
      [<CommonParameters>]

Beschreibung

Das Invoke-Expression Cmdlet wertet eine angegebene Zeichenfolge als Befehl aus oder führt sie aus und gibt die Ergebnisse des Ausdrucks oder Befehls zurück. Ohne Invoke-Expressionwird eine an der Befehlszeile übermittelte Zeichenfolge unverändert zurückgegeben (echoed).

Ausdrücke werden im aktuellen Bereich ausgewertet und ausgeführt. Weitere Informationen finden Sie unter about_Scopes.

Achtung

Treffen Sie angemessene Vorsichtsmaßnahmen, wenn Sie das Invoke-Expression Cmdlet in Skripts verwenden. Wenn Sie Invoke-Expression verwenden, um einen Befehl auszuführen, den der Benutzer eingibt, vergewissern Sie sich, dass der Befehl sicher ausgeführt werden kann, bevor Sie ihn ausführen. Im Allgemeinen empfiehlt es sich, Ihr Skript mit vordefinierten Eingabeoptionen zu entwerfen, statt die Freihandformeingabe zuzulassen.

Beispiele

Beispiel 1: Auswerten eines Ausdrucks

$Command = "Get-Process"
$Command

Get-Process

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

In diesem Beispiel wird die Verwendung von Invoke-Expression zum Auswerten eines Ausdrucks veranschaulicht. Ohne Invoke-Expressionwird der Ausdruck gedruckt, aber nicht ausgewertet.

Der erste Befehl weist der $Command Variablen den Wert (Get-Processeine Zeichenfolge) zu.

Der zweite Befehl veranschaulicht die Auswirkungen bei der Eingabe des Namens der Variablen in der Befehlszeile. PowerShell gibt die Zeichenfolge an.

Der dritte Befehl verwendet Invoke-Expression , um die Zeichenfolge auszuwerten.

Beispiel 2: Ausführen eines Skripts auf dem lokalen Computer

Invoke-Expression -Command "C:\ps-test\testscript.ps1"
"C:\ps-test\testscript.ps1" | Invoke-Expression

Diese Befehle verwenden Invoke-Expression , um ein Skript TestScript.ps1 auf dem lokalen Computer auszuführen. Die beiden Befehle sind äquivalent. Der erste verwendet den Command-Parameter , um den auszuführenden Befehl anzugeben. Die zweite verwendet einen Pipelineoperator (|), um die Befehlszeichenfolge an zu Invoke-Expressionsenden.

Beispiel 3: Ausführen eines Befehls in einer Variablen

$Command = 'Get-Process | where {$_.cpu -gt 1000}'
Invoke-Expression $Command

In diesem Beispiel wird eine Befehlszeichenfolge ausgeführt, die in der $Command Variablen gespeichert wird.

Die Befehlszeichenfolge ist in einzelne Anführungszeichen eingeschlossen, da sie eine Variable enthält, $_die das aktuelle Objekt darstellt. Wenn sie in doppelte Anführungszeichen eingeschlossen wäre, würde die $_ Variable durch ihren Wert ersetzt, bevor sie in der $Command Variablen gespeichert wurde.

Beispiel 4: Abrufen und Ausführen eines Cmdlets Hilfebeispiel

$Cmdlet_name = "Get-ComputerInfo"
$Example_number = 1
$Example_code = (Get-Help $Cmdlet_name).examples.example[($Example_number-1)].code
Invoke-Expression $Example_code

Mit diesem Befehl wird das erste Beispiel im Hilfethema des Get-EventLog Cmdlets abgerufen und ausgeführt.

Um ein Beispiel für ein anderes Cmdlet auszuführen, ändern Sie den Wert der $Cmdlet_name Variablen in den Namen des Cmdlets. Ändern Sie die $Example_number Variable in die Beispielnummer, die Sie ausführen möchten. Der Befehl schlägt fehl, wenn die Beispielnummer ungültig ist.

Hinweis

Wenn der Beispielcode aus der Hilfedatei im Beispiel ausgegeben wurde, versucht PowerShell, die Ausgabe zusammen mit dem Code auszuführen, und es wird ein Fehler ausgelöst.

Parameter

-Command

Gibt den auszuführenden Befehl oder Ausdruck an. Geben Sie den Befehl oder Ausdruck oder eine Variable ein, die den Befehl oder Ausdruck enthält. Der Command-Parameter ist erforderlich.

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

Eingaben

System.String or PSObject

Sie können ein -Objekt, das den Befehl darstellt, an übergeben Invoke-Expression. Verwenden Sie die $Input automatische Variable, um die Eingabeobjekte im Befehl darzustellen.

Ausgaben

PSObject

Gibt die Ausgabe zurück, die vom aufgerufenen Befehl generiert wird (der Wert des Befehlsparameters ).

Hinweise

In den meisten Fällen rufen Sie Ausdrücke mithilfe des Aufrufoperators von PowerShell auf und erzielen die gleichen Ergebnisse. Der Aufrufoperator ist eine sicherere Methode. Weitere Informationen finden Sie unter about_Operators.