Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Polecenie Invoke-Expression cmdlet powinno być używane tylko w ostateczności. W większości scenariuszy dostępne są bezpieczniejsze i bardziej niezawodne alternatywy. Fora, takie jak Stack Overflow, są wypełnione przykładami nieprawidłowego Invoke-Expression użycia. Należy również pamiętać, że element PSScriptAnalyzer ma dla tego regułę. Aby uzyskać więcej informacji, zobacz UnikanieusingInvokeExpression.
Uważnie zastanów się nad implikacjami zabezpieczeń. Gdy ciąg z niezaufanego źródła, takiego jak dane wejściowe użytkownika, jest przekazywany bezpośrednio do Invoke-Expression, można wykonać dowolne polecenia. Zawsze należy najpierw rozważyć inne, bardziej niezawodne i bezpieczne rozwiązanie.
Typowe scenariusze
Rozważ następujące scenariusze użycia:
Łatwiej jest przekierować program PowerShell, aby wykonać coś naturalnie. Na przykład:
Get-Content ./file.ps1 | Invoke-ExpressionTe przypadki są trywialnie możliwe do uniknięcia. Skrypt lub kod już istnieje w pliku lub formularzu AST, więc należy napisać skrypt z parametrami i wywołać go bezpośrednio zamiast używać
Invoke-Expressionw ciągu.Uruchamianie skryptu z zaufanego źródła. Na przykład uruchomienie skryptu instalacji z repozytorium programu PowerShell:
Invoke-WebRequest https://aka.ms/install-powershell.ps1 | Invoke-ExpressionTego polecenia należy używać tylko interaktywnie. I choć to sprawia, że życie jest prostsze, ta praktyka powinna być zniechęcona.
Testowanie pod kątem błędów analizowania. Zespół programu PowerShell testuje błędy analizy w kodzie źródłowym przy użyciu,
Invoke-Expressionponieważ jest to jedyny sposób przekształcania błędu analizy w czasie wykonywania.
Podsumowanie
Większość innych języków skryptów ma sposób na ocenę ciągu jako kodu, a jako interpretowany język, program PowerShell musi mieć sposób dynamicznego uruchamiania. Nie ma jednak powodu do użycia Invoke-Expression w środowisku produkcyjnym.
Informacje
- Omówienie stosu Overflow — w jakim scenariuszu było używane wyrażenie Invoke-Expression?
- Wpis w blogu programu PowerShell — Wywołanie wyrażenia uważane za szkodliwe