Compartilhar via


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

String

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.

PSObject

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.