Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
L'applet de commande Invoke-Expression
ne doit être utilisée qu'en dernier recours. Dans la plupart des scénarios, des alternatives plus sûres et plus robustes sont disponibles. Les forums comme Stack Overflow sont remplis d'exemples d'utilisation incorrecte Invoke-Expression
. Notez également que PSScriptAnalyzer a une règle pour cela. Pour plus d'informations, consultez AvoidUsingInvokeExpression.
Examinez attentivement les implications en matière de sécurité. Lorsqu'une chaîne provenant d'une source non fiable telle qu'une entrée utilisateur est transmise directement à Invoke-Expression
, des commandes arbitraires peuvent être exécutées. Envisagez toujours d'abord une solution différente, plus robuste et sécurisée.
Scénarios courants
Envisagez les scénarios d'utilisation suivants :
Il est plus simple de rediriger PowerShell pour exécuter quelque chose naturellement. Par exemple :
Get-Content ./file.ps1 | Invoke-Expression
Ces cas sont trivialement évitables. Le script ou le code existe déjà sous forme de fichier ou AST, vous devez donc écrire un script avec des paramètres et l'invoquer directement au lieu de l'utiliser
Invoke-Expression
sur une chaîne.Exécution d'un script à partir d'une source fiable. Par exemple, en exécutant le script d'installation à partir du dépôt PowerShell :
Invoke-WebRequest https://aka.ms/install-powershell.ps1 | Invoke-Expression
Vous ne devez l'utiliser qu'en mode interactif. Et, bien que cela simplifie la vie, cette pratique devrait être découragée.
Test des erreurs d'analyse. L'équipe PowerShell teste les erreurs d'analyse dans le code source en utilisant
Invoke-Expression
car c'est le seul moyen de transformer une erreur d'analyse en une erreur d'exécution.
Conclusion
La plupart des autres langages de script ont un moyen d'évaluer une chaîne en tant que code, et en tant que langage interprété, PowerShell doit avoir un moyen de s'exécuter de manière dynamique. Mais il n'y a aucune bonne raison de l'utiliser Invoke-Expression
dans un environnement de production.
References
- Discussion sur Stack Overflow – Dans quel scénario Invoke-Expression a-t-il été conçu pour être utilisé ?
- Article de blog PowerShell – Invoke-Expression considérée comme nuisible