Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O cmdlet Invoke-Expression deve ser usado somente como último recurso. Na maioria dos cenários, alternativas mais seguras e robustas estão disponíveis. Fóruns como o Stack Overflow estão cheios de exemplos de uso indevido de Invoke-Expression. Observe também que PSScriptAnalyzer tem uma regra para isso. Para obter mais informações, confira AvoidUsingInvokeExpression.
Considere cuidadosamente as implicações de segurança. Quando uma cadeia de caracteres de uma fonte não confiável, como a entrada de usuário, é enviada diretamente para Invoke-Expression, comandos arbitrários podem ser executados. Sempre considere uma solução diferente, mais robusta e segura primeiro.
Cenários comuns
Considere os seguintes cenários de uso:
É mais simples redirecionar o PowerShell para executar algo naturalmente. Por exemplo:
Get-Content ./file.ps1 | Invoke-ExpressionEsses casos podem ser facilmente evitados. O script ou código já existe no arquivo ou no formulário AST, portanto, você deve escrever um script com parâmetros e invocá-lo diretamente em vez de usar o
Invoke-Expressionem uma cadeia de caracteres.Executar um script de uma fonte confiável. Por exemplo, executar o script de instalação no repositório do PowerShell:
Invoke-WebRequest https://aka.ms/install-powershell.ps1 | Invoke-ExpressionVocê só deve usar isso de modo interativo. E, embora isso torne a vida mais simples, essa prática é desencorajada.
Testar em busca de erros de análise. A equipe do PowerShell testa erros de análise no código-fonte usando
Invoke-Expressionporque essa é a única maneira de transformar um erro de tempo de análise em um de runtime.
Conclusão
A maioria das outras linguagens de script tem uma forma de avaliar uma cadeia de caracteres como código e, por ser uma linguagem interpretada, o PowerShell precisa ter uma forma de ser executado dinamicamente. Mas não há uma boa razão para usar o Invoke-Expression em um ambiente de produção.
Referências
- Discussão do Stack Overflow – Em qual cenário Invoke-Expression foi projetado para ser usado?
- Postagem no blog do PowerShell – Invoke-Expression considerado prejudicial