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
, viene restituita una stringa inviata alla riga di comando (eco) invariata.
Le espressioni vengono valutate ed eseguite nell'ambito corrente. Per altre informazioni, vedere about_Scopes.
Cautela
Adottare precauzioni ragionevoli quando si usa il cmdlet Invoke-Expression
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, anziché consentire l'input a mano libera.
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 di Get-Process
(stringa) alla variabile $Command
.
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 variabile $Command
.
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 $_
verrebbe sostituita dal relativo valore prima del salvataggio nella variabile $Command
.
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 cmdlet Get-EventLog
.
Per eseguire un esempio di cmdlet diverso, modificare il valore della variabile $Cmdlet_name
con il nome del cmdlet. Modificare la variabile $Example_number
con il numero di esempio da 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 oppure immettere una variabile contenente il comando o l'espressione. È necessario il parametro command.
Tipo: | String |
Posizione: | 0 |
Valore predefinito: | None |
Necessario: | True |
Accettare l'input della pipeline: | True |
Accettare caratteri jolly: | False |
Input
È possibile inviare tramite pipe una stringa che rappresenta l'espressione da richiamare a questo cmdlet. Usare la variabile automatica $Input
per rappresentare gli oggetti di input nel comando .
È possibile inviare tramite pipe un oggetto che rappresenta l'espressione da richiamare a questo cmdlet. Usare la variabile automatica $Input
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.