Udostępnij za pomocą


Unikanie używania polecenia Invoke-Expression

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-Expression
    

    Te 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-Expression w 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-Expression
    

    Tego 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-Expression ponieważ 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