Intérprete do PowerShell Expression sobre variáveis

1

Em resposta a essa pergunta , o solicitante original queria saber

In PowerShell, is there a way, after typing a long or complicated command, to commit that command into the history buffer, but not execute it?

Minha solução, no entanto, era puramente divertida, mas eu me perguntava como / porque funcionava no back-end.

Resposta

$VariableName = "Windows Command"

Então, para executar:

Invoke-Expression "$VariableName"

Um exemplo com o Ping:

TambémconseguiusarasexpressõesdoPowerShelldamesmamaneira:

PSH:>$Outlooks="Get-Process -Name Outlook -Verbose | fl StartTime, Threads"
PS H:> Invoke-Expression "$Outlooks"

Minha teoria

Basicamente, acredito que o que está acontecendo é que estamos criando uma string para a primeira variável (Exatamente o que parece, direto), e então quando invocamos nossa variável dentro de "" ela força o interpretador a expandir a variável , fazendo com que ele chame o comando certo.

O meu entendimento de como isso funciona é preciso? Referências preferidas.

    
por Austin T French 14.06.2013 / 21:37

1 resposta

2

Sim, isso parece ser exatamente o que está acontecendo (BTW, você nem precisa de aspas ao redor da string de comando enquanto invoca).

De acordo com a descrição da ajuda do cmdlet (obtida por meio de get-help Invoke-Expression -full ):

iex [-Command] <String> [<CommonParameters>]
Invoke-Expression [-Command] <String> [<CommonParameters>]

The Invoke-Expression cmdlet evaluates or runs a specified string as a command and returns the results of the expression or command. Without Invoke-Expression, a string submitted at the command line would be returned (echoed) unchanged.

An expression is a statement that can be evaluated and produces a result, such as a Windows PowerShell command.

Se o comando armazenado na variável string não for muito complexo, você também poderá usar o operador de chamada (& ;) da seguinte forma:

& $string

Mais detalhes cortesia esta página :

If the result of the expression is an empty array, invoke-expression will output $null

Invoke-Expression can be used to perform string expansion but if the string is supplied by an end-user you need to ensure that it does not contain malicious code/expressions.

    
por 15.06.2013 / 05:02

Tags