80 votes

Ignorer l'avertissement de sécurité lors de l'exécution du script à partir de la ligne de commande

Je tente d'exécuter un script à partir d'un dossier partagé que je fais confiance :

PowerShell -file "\\server\scripts\my.ps1"

Mais je reçois un avertissement de sécurité et je dois appuyer sur 'R' pour continuer

Avertissement de sécurité Exécutez uniquement des scripts que vous faites confiance. Bien que les scripts provenant d'Internet peuvent être utiles, ce script peut potentiellement endommager votre ordinateur. Voulez-vous exécuter \server\scripts\my.ps1? [D] Ne pas exécuter [R] Exécuter une seule fois [S] Suspendre [A] Aide (la valeur par défaut est "D") : d

Puis-je ignorer cet avertissement? Le pseudo-code souhaité que je veux est :

PowerShell -IGNORE_SECURITY_WARNING -file "\\server\scripts\my.ps1"

90voto

LeeHolmes Points 741

Cela est abordé dans "PowerShell Execution Policies in Standard Images" sur le blog de Lee Holmes et "PowerShell’s Security Guiding Principles" sur le blog Windows Power Shell .

Résumé Certains ordinateurs considèrent les chemins UNC comme provenant d'internet, donc PowerShell les traite comme des fichiers distants. Vous pouvez soit désactiver cette fonctionnalité sur ces serveurs (UncAsIntranet = 0,) soit ajouter les machines distantes à vos hôtes de confiance.

Si vous ne voulez pas faire ni l'un ni l'autre, PowerShell v2 prend en charge un paramètre -ExecutionPolicy qui fait exactement ce que votre pseudocode veut. PowerShell -ExecutionPolicy Bypass -File (...).

4 votes

Merci! -ExecutionPolicy Bypass est exactement ce que je cherchais.

1 votes

@LeeHomes Je cherchais autre chose mais -ExecutionPolicy ByPass a résolu mon problème. Tu m'as économisé beaucoup de recherches sur Google et de temps. Merci

2 votes

Juste pour clarifier - "ajouter aux hôtes de confiance" signifie dans les options Internet du système, accessibles via le panneau de configuration ou dans Internet Explorer. Le nom semble être une correspondance de chaîne. Mon nom de partage est \\foo-files. Ajouter le nom foo-files.example.com aux hôtes de confiance n'a pas fonctionné, j'ai dû simplement ajouter le nom foo-files.

52voto

Alfredo Jiménez Points 301

Pour éviter les avertissements, vous pouvez :

Set-ExecutionPolicy bypass

4 votes

Attention : Cela définit la Politique d'exécution sur toute la machine, ce qui constitue un grand risque pour la sécurité. La solution de @LeeHolmes ci-dessus définit la Politique d'exécution juste pour cette session, ce qui représente un risque moindre.

0 votes

Je trouve les implications en termes de sécurité atroces, cependant c'est la seule manière que j'ai trouvé pour éditer un fichier à distance avec PowerShell ISE sans avoir une popup à chaque fois que le bouton d'exécution est cliqué... du moins sans modifier les paramètres de sécurité Internet qui, dans le cas de l'environnement cible, casseraient également le contenu ActiveX ainsi que certains paramètres de sécurité mal choisis mais nécessaires qui ne fonctionnent que dans la zone par défaut Intranet locale.

47voto

mopsled Points 4369

Si vous rencontrez cette erreur à partir d'un script powershell téléchargé, vous pouvez débloquer le script de cette manière :

  1. Faites un clic droit sur le fichier .ps1 en question, et sélectionnez Propriétés

  2. Cliquez sur Débloquer dans les propriétés du fichier

    entrer la description de l'image ici

  3. Cliquez sur OK

2 votes

Merci!! Cela a fonctionné pour moi, j'étais invité à chaque lancement même avec Set-ExecutionPolicy Unrestricted

2 votes

Au moins sur mon ordinateur, Unblock-File ne semble pas aider avec un chemin UNC comme illustré dans la question d'origine et le bouton Unblock n'apparaît pas dans la boîte de dialogue des propriétés du fichier. Je suppose que c'est parce que votre fichier est hébergé localement C:\..., ce qui rend cette réponse invalide pour la question d'origine (bien qu'elle soit utile pour >=28 autres)

1 votes

Certainement m'a aidé. En raison des limitations de notre environnement, nous avons dû installer manuellement des modules (stackoverflow.com/a/37488195/74276), puis les installer sur le serveur (docs.microsoft.com/en-us/powershell/scripting/developer/mod‌​ule/…). Ensuite, nous avons découvert que nous devions exécuter "Get-ChildItem | Unblock-File" pour débloquer tous les fichiers dans le dossier du module (sous le dossier du numéro de version).

3voto

Don Werve Points 3901

Essayez ceci, éditez le fichier avec :

notepad foo.ps1:Zone.Identifier

Et définissez 'ZoneId=0'

4 votes

Ou, en V3, Débloquer-Fichier (bien que ce commentaire et cette réponse n'aient rien à voir avec la question de l'IO)

0 votes

Pour une raison quelconque, je ne pouvais pas voir Unblock-File même avec la v4, mais la solution alternative de Zone.Identifier a fonctionné. Le fichier a également été créé sur l'hôte, mais toujours la demande avec la politique d'exécution du système 'RemoteSigned'.

2voto

zdan Points 11822

Vous voulez définir la stratégie d'exécution sur votre machine en utilisant Set-ExecutionPolicy:

Set-ExecutionPolicy Unrestricted

Vous voudrez peut-être examiner les différentes stratégies d'exécution pour voir laquelle vous convient. Jetez un œil à "help about_signing" pour plus d'informations.

0 votes

Cela modifie la stratégie d'exécution de manière permanente, ce qui peut ne pas être souhaité pour une utilisation ponctuelle.

3 votes

En définissant l'ExecutionPolicy sur Non-restreint permet l'exécution de scripts réseau, mais ne contourne pas la demande.

2 votes

Vous voulez utiliser "bypass" au lieu de "non restreint". "Bypass" est encore MOINS restrictif que "non restreint" et élimine les demandes de sécurité.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X