Invoke-Expression
Executa comandos ou expressões no computador local.
Sintaxe
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 string 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 inserido pelo usuário, verifique se o comando é seguro para execução 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 Get-Process
(uma string) à $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 é usado Invoke-Expression
para avaliar a cadeia de caracteres.
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 são usados 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 que é 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 estivesse 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-ComputerInfo"
$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 $Cmdlet_name
valor da 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.
Observação
Se o código de exemplo do arquivo de ajuda tiver saída no exemplo, o PowerShell tentará executar a saída junto com o código e um erro será gerado.
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.
Tipo: | String |
Cargo: | 0 |
Valor padrão: | None |
Obrigatório: | True |
Aceitar a entrada de pipeline: | True |
Aceitar caracteres curinga: | False |
Entradas
Você pode canalizar uma cadeia de caracteres que representa a expressão a ser invocada para esse cmdlet. Use a $Input
variável automática para representar os objetos de entrada no comando.
Você pode canalizar um objeto que representa a expressão a ser invocada para esse cmdlet. Use a $Input
variável automática para representar os objetos de entrada no comando.
Saídas
None
Esse cmdlet não retorna nenhuma saída própria, mas o comando invocado pode retornar saída.
Observações
O Windows PowerShell inclui os seguintes aliases para Invoke-Expression
:
iex
Na maioria dos casos, você invoca expressões usando o operador de chamada do PowerShell e obtém os mesmos resultados. O operador de chamadas é um método mais seguro. Para obter mais informações, consulte about_Operators.