Invoke-Expression
Executa comandos ou expressões no computador local.
Syntax
Invoke-Expression
[-Command] <String>
[<CommonParameters>]
Description
O Invoke-Expression
cmdlet avalia ou executa uma cadeia de caracteres especificada como um comando e retorna os resultados da expressão ou do comando. Sem Invoke-Expression
, uma cadeia de caracteres enviada na linha de comando é retornada (ecoada) inalterada.
As expressões são avaliadas e executadas no escopo atual. Para obter mais informações, consulte about_Scopes.
Cuidado
Tome precauções razoáveis ao usar o Invoke-Expression
cmdlet em scripts. Ao usar Invoke-Expression
para executar um comando que o usuário insere, verifique se o comando é seguro para ser executado antes de executá-lo. Em geral, é melhor criar seu script com opções predefinidas de entrada, em vez de permitir a entrada de forma livre.
Exemplos
Exemplo 1: Avaliar uma expressão
$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
...
Este exemplo demonstra o uso de Invoke-Expression
para avaliar uma expressão. Sem Invoke-Expression
, a expressão é impressa, mas não avaliada.
O primeiro comando atribui um valor de (uma cadeia de Get-Process
caracteres) à $Command
variável .
O segundo comando mostra o efeito de digitar o nome da variável na linha de comando. O PowerShell ecoa a cadeia de caracteres.
O terceiro comando usa para avaliar a cadeia de caracteres Invoke-Expression
.
Exemplo 2: executar um script no computador local
Invoke-Expression -Command "C:\ps-test\testscript.ps1"
"C:\ps-test\testscript.ps1" | Invoke-Expression
Esses comandos usam Invoke-Expression
para executar um script, TestScript.ps1, no computador local. Os dois comandos são equivalentes. O primeiro usa o parâmetro Command para especificar o comando a ser executado.
O segundo usa um operador de pipeline (|
) para enviar a cadeia de caracteres de comando para Invoke-Expression
.
Exemplo 3: executar um comando em uma variável
$Command = 'Get-Process | where {$_.cpu -gt 1000}'
Invoke-Expression $Command
Este exemplo executa uma cadeia de caracteres de comando salva na $Command
variável .
A cadeia de caracteres de comando é colocada entre aspas simples porque inclui uma variável, $_
, que representa o objeto atual. Se ela fosse colocada entre aspas duplas, a $_
variável seria substituída por seu valor antes de ser salva na $Command
variável.
Exemplo 4: obter e executar um exemplo de Ajuda de cmdlet
$Cmdlet_name = "Get-EventLog"
$Example_number = 1
$Example_code = (Get-Help $Cmdlet_name).examples.example[($Example_number-1)].code
Invoke-Expression $Example_code
Esse comando recupera e executa o primeiro exemplo no tópico da Ajuda do Get-EventLog
cmdlet.
Para executar um exemplo de um cmdlet diferente, altere o valor da $Cmdlet_name
variável para o nome do cmdlet. E altere a $Example_number
variável para o número de exemplo que você deseja executar. O comando falhará se o número de exemplo não for válido.
Parâmetros
-Command
Especifica o comando ou expressão a executar. Digite o comando ou expressão ou insira uma variável que contenha o comando ou expressão. O parâmetro Command é necessário.
Type: | String |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
Entradas
System.String or PSObject
Você pode redirecionar um objeto que representa o comando para Invoke-Expression
.
Use a $Input
variável automática para representar os objetos de entrada no comando .
Saídas
PSObject
Retorna a saída gerada pelo comando invocado (o valor do parâmetro Command ).
Observações
Na maioria dos casos, você invoca expressões usando o operador de chamada do PowerShell e obtém os mesmos resultados. O operador de chamada é um método mais seguro. Para obter mais informações, consulte about_Operators.