Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Das Invoke-Expression cmdlet sollte nur als letztes Mittel verwendet werden. In den meisten Szeniarien sind sicherere und stabilere Alternativen verfügbar. Foren wie Stack Overflow sind voll von Beispielen des Invoke-Expression Missbrauchs. Beachten Sie außerdem, dass PSScriptAnalyzer eine Regel dafür hat. Weitere Informationen finden Sie unter AvoidUsingInvokeExpression.
Berücksichtigen Sie die Sicherheitsauswirkungen sorgfältig. Wenn eine Zeichenfolge aus einer nicht vertrauenswürdigen Quelle stammt, wie z. B. Benutzereingaben, und direkt an Invoke-Expression übergeben wird, können beliebige Befehle ausgeführt werden. Prüfen Sie immer zuerst eine stabilere und sicherere Lösung.
Häufige Szenarios
Betrachten Sie die folgenden Verwendungsszenarien:
Es ist einfacher, PowerShell dazu umzuleiten, etwas natürlich auszuführen. Beispiel:
Get-Content ./file.ps1 | Invoke-ExpressionDiese Fälle sind im Alltag zu vermeiden. Das Skript oder der Code ist bereits in Datei- oder AST-Form vorhanden, also sollten Sie ein Skript mit Parametern schreiben und es direkt aufrufen, anstelle
Invoke-Expressionauf einer Zeichenfolge anzuwenden.Ausführen eines Skripts aus einer vertrauenswürdigen Quelle. Z. B. ausführen des Installationsskripts aus dem PowerShell-Repository:
Invoke-WebRequest https://aka.ms/install-powershell.ps1 | Invoke-ExpressionSie sollten dies nur interaktiv verwenden. Und obwohl diese Vorgehensweise das Leben einfacher macht, sollte sie in der Praxis verworfen werden.
Testen auf Parsingfehler. Das PowerShell-Team testet unter Verwendung von
Invoke-Expressionauf Parsingfehler im Quellcode, da dies die einzige Möglichkeit ist, einen Parse-Zeitfehler in einen Laufzeitfehler umzuwandeln.
Zusammenfassung
Die meisten anderen Skript-Programmiersprachen verfügen über eine Möglichkeit, eine Zeichenfolge als Code auszuwerten, und als interpretierte Programmiersprache muss PowerShell eine Möglichkeit haben, sich dynamisch selbst zu ausführen. Aber es gibt keinen guten Grund, Invoke-Expression in einer Produktionsumgebung zu verwenden.
Referenzen
- Stack Overflow-Diskussion - Für welches Nutzungsszenario wurde der Aufrufausdruck entwickelt?
- PowerShell-Blogbeitrag - Aufrufausdruck als schädlich angesehen