Invoke-Expression
Esegue comandi o espressioni nel computer locale.
Sintassi
Invoke-Expression [-Command] <string> [<CommonParameters>]
Descrizione
Il cmdlet Invoke-Expression valuta o esegue una stringa specificata come comando e restituisce i risultati dell'espressione o del comando. Senza Invoke-Expression, una stringa inviata alla riga di comando verrebbe restituita (ripetuta) invariata.
Parametri
-Command <string>
Specifica il comando o l'espressione da eseguire. Digitare il comando o l'espressione oppure immettere una variabile che li contiene. Il parametro Command è obbligatorio.
Obbligatorio? |
true |
Posizione? |
1 |
Valore predefinito |
|
Accettare input da pipeline? |
true (ByValue) |
Accettare caratteri jolly? |
false |
<CommonParameters>
Questo cmdlet supporta i parametri comuni -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer e -OutVariable. Per ulteriori informazioni, vedere about_Commonparameters.
Input e output
Il tipo di input è il tipo degli oggetti che è possibile reindirizzare al cmdlet. Il tipo restituito è il tipo degli oggetti restituiti dal cmdlet.
Input |
System.String o PSObject È possibile reindirizzare un oggetto che rappresenta il comando a Invoke-Expression. Utilizzare la variabile automatica $input per rappresentare gli oggetti di input nel comando. |
Output |
PSObject Restituisce l'output generato dal comando richiamato (valore del parametro Command). |
Note
-- Un'espressione è un'istruzione che può essere valutata e produce un risultato, ad esempio un comando di Windows PowerShell.
-- Utilizzare con la dovuta cautela il cmdlet Invoke-Expression negli script. Quando si utilizza Invoke-Expression per eseguire un comando immesso dall'utente, verificare che il comando sia sicuro prima di eseguirlo. In genere, è consigliabile progettare lo script con opzioni di input predefinite, piuttosto che consentire l'input a mano libera.
Esempio 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
...
Descrizione
-----------
In questo esempio viene illustrato l'utilizzo di Invoke-Expression per valutare un'espressione. Senza Invoke-Expression, l'espressione viene stampata, ma non valutata.
Con il primo comando viene assegnato un valore "Get-Process" (stringa) alla variabile $command.
Con il secondo comando viene illustrato l'effetto della digitazione del nome della variabile nella riga di comando. Windows PowerShell restituisce la stringa.
Nel terzo comando viene utilizzato il cmdlet Invoke-Expression per valutare la stringa.
Esempio 2
C:\PS>invoke-expression -command "C:\ps-test\testscript.ps1"
C:\PS> "C:\ps-test\testscript.ps1" | invoke-expression
Descrizione
-----------
In questi comandi viene utilizzato Invoke-Expression per eseguire uno script, TestScript.ps1, nel computer locale. I due comandi sono equivalenti. Nel primo viene utilizzato il parametro Command per specificare il comando da eseguire. Nel secondo viene utilizzato un operatore pipeline (|) per inviare la stringa di comando a Invoke-Expression.
Esempio 3
C:\PS>$cmd = 'get-process | where {$_.cpu -gt 1000}'
C:\PS> iex $command
Descrizione
-----------
In questo esempio viene eseguita una stringa di comando salvata nella variabile $cmd.
La stringa di comando è racchiusa tra virgolette singole perché include una variabile, $_, che rappresenta l'oggetto corrente. Se fosse racchiusa tra virgolette doppie, la variabile $_ verrebbe sostituita dal relativo valore prima di essere salvata nella stringa $command.
Esempio 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
Descrizione
-----------
Con questo comando viene recuperato ed eseguito il primo esempio nell'argomento della guida del cmdlet Get-EventLog.
Per eseguire un esempio di un altro cmdlet, sostituire il valore della variabile $cmdlet_name con il nome del cmdlet desiderato. Inoltre, impostare la variabile $example_number sul numero di esempio che si desidera eseguire. Il comando non verrà eseguito se il numero di esempio non è valido.