Invoke-Expression

Esegue comandi o espressioni nel computer locale.

Sintassi

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

Descrizione

Il Invoke-Expression cmdlet valuta o esegue una stringa specificata come comando e restituisce i risultati dell'espressione o del comando. Senza Invoke-Expression, viene restituita una stringa inviata alla riga di comando (con eco).

Le espressioni vengono valutate ed eseguite nell'ambito corrente. Per altre informazioni, vedere about_Scopes.

Attenzione

Prendere precauzioni ragionevoli quando si usa il Invoke-Expression cmdlet negli script. Quando si usa Invoke-Expression per eseguire un comando immesso dall'utente, verificare che il comando sia sicuro da eseguire prima di eseguirlo. In generale, è consigliabile progettare lo script con opzioni di input predefinite, invece di consentire l'input manuale.

Esempio

Esempio 1: Valutare un'espressione

$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 questo esempio viene illustrato l'uso di Invoke-Expression per valutare un'espressione. Senza Invoke-Expression, l'espressione viene stampata, ma non valutata.

Il primo comando assegna un valore ( Get-Process stringa) alla $Command variabile.

Il secondo comando mostra l'effetto della digitazione del nome della variabile nella riga di comando. PowerShell restituisce la stringa.

Il terzo comando usa Invoke-Expression per valutare la stringa.

Esempio 2: Eseguire uno script nel computer locale

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

Questi comandi usano Invoke-Expression per eseguire uno script, TestScript.ps1, nel computer locale. I due comandi sono equivalenti. Il primo usa il parametro Command per specificare il comando da eseguire. Il secondo usa un operatore pipeline (|) per inviare la stringa di comando a Invoke-Expression.

Esempio 3: Eseguire un comando in una variabile

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

In questo esempio viene eseguita una stringa di comando salvata nella $Command variabile .

La stringa di comando è racchiusa tra virgolette singole perché include una variabile, $_, che rappresenta l'oggetto corrente. Se fosse racchiuso tra virgolette doppie, la $_ variabile verrà sostituita dal relativo valore prima del salvataggio nella $Command variabile.

Esempio 4: Ottenere ed eseguire un esempio della Guida del cmdlet

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

Questo comando recupera ed esegue il primo esempio nell'argomento della Guida del Get-EventLog cmdlet.

Per eseguire un esempio di cmdlet diverso, modificare il valore della $Cmdlet_name variabile impostando il nome del cmdlet. Modificare la $Example_number variabile con il numero di esempio che si vuole eseguire. Il comando ha esito negativo se il numero di esempio non è valido.

Nota

Se il codice di esempio del file della Guida ha output nell'esempio, PowerShell tenta di eseguire l'output insieme al codice e verrà generato un errore.

Parametri

-Command

Specifica il comando o l'espressione da eseguire. Digitare il comando o l'espressione o immettere una variabile che contiene il comando o l'espressione. Il parametro Command è obbligatorio.

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

Input

String

È possibile inviare tramite pipe una stringa che rappresenta l'espressione da richiamare a questo cmdlet. Usare la $Input variabile automatica per rappresentare gli oggetti di input nel comando .

PSObject

È possibile inviare tramite pipe un oggetto che rappresenta l'espressione da richiamare a questo cmdlet. Usare la $Input variabile automatica per rappresentare gli oggetti di input nel comando .

Output

None

Questo cmdlet non restituisce alcun output autonomo, ma il comando richiamato può restituire l'output.

Note

PowerShell include gli alias seguenti per Invoke-Expression:

  • Tutte le piattaforme:
    • iex

Nella maggior parte dei casi, si richiamano espressioni usando l'operatore di chiamata di PowerShell e si ottengono gli stessi risultati. L'operatore di chiamata è un metodo più sicuro. Per altre informazioni, vedere about_Operators.