Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Rutina Invoke-Expression by se měla používat jenom jako poslední možnost. Ve většině scénářů jsou k dispozici bezpečnější a robustnější alternativy. Fóra, jako je Stack Overflow, jsou naplněna příklady Invoke-Expression zneužití. Všimněte si také, že PSScriptAnalyzer má pravidlo pro toto. Další informace naleznete v tématu AvoidUsingInvokeExpression.
Pečlivě zvažte důsledky zabezpečení. Pokud je řetězec z nedůvěryhodného zdroje, jako je vstup uživatele, předán přímo Invoke-Expression, lze spustit libovolné příkazy. Vždy nejprve zvažte jiné, robustnější a bezpečnější řešení.
Obvyklé scénáře
Zvažte následující scénáře použití:
Je jednodušší přesměrovat PowerShell tak, aby prováděl něco přirozeně. Příklad:
Get-Content ./file.ps1 | Invoke-ExpressionTyto případy se dají triviálně vyhnout. Skript nebo kód již existuje ve formátu souboru nebo AST, takže byste měli napsat skript s parametry a vyvolat ho přímo místo použití
Invoke-Expressionv řetězci.Spuštění skriptu z důvěryhodného zdroje Například spuštění instalačního skriptu z úložiště PowerShellu:
Invoke-WebRequest https://aka.ms/install-powershell.ps1 | Invoke-ExpressionMěli byste ho používat jenom interaktivně. A i když to usnadňuje život, měla by být tato praxe odrazována.
Testování chyb analýzy Týmový tým PowerShell testuje chyby ve zdrojovém kódu pomocí,
Invoke-Expressionprotože je to jediný způsob, jak převést chybu parse-time na modul runtime.
Závěr
Většina jiných skriptovacího jazyka má způsob, jak vyhodnotit řetězec jako kód a jako interpretovaný jazyk, musí mít PowerShell způsob, jak se dynamicky spouštět. Neexistuje ale žádný dobrý důvod k použití Invoke-Expression v produkčním prostředí.
Reference
- Diskuze o Stack Overflowu – v jakém scénáři byl vyvolání výrazu navržený k použití?
- Blogový příspěvek PowerShellu – Vyvolání výrazu, který je považován za škodlivý