2013-08-30 1 views
2

J'ai récemment découvert que, par défaut, l'exécution de scripts PowerShell est désactivée. J'allais m'en servir pour retirer en toute sécurité un périphérique USB de Windows, mais si ce n'est pas le cas par défaut, je devrais l'activer en premier. Est-il généralement acceptable de faire de telles choses?Est-il acceptable d'activer Powershell par programmation?

Des solutions alternatives sont également les bienvenues.

Cette question suit: https://superuser.com/questions/637854/safely-remove-a-usb-drive-using-bat-file/637878

+1

Si elle était « généralement acceptable de le faire », il ne serait pas désactivé par défaut. Vous aurez également besoin de privilèges administratifs pour l'activer. –

+0

@KenWhite Bon point, donc je suppose que je dois continuer à chercher une alternative maintenant – Andy

+2

Une petite mise en garde: cela peut ne pas rester vrai pour tous les environnements Windows qui vont de l'avant. Windows Server 2012 R2 a "RemoteSigned" comme stratégie d'exécution par défaut car, selon Jeffrey Snover, les scripts PowerShell sur Windows Server sont désormais un "scénario courant". Il en parle un peu dans [cette vidéo] (http://www.microsoftvirtualacademy.com/Content/ViewContent.aspx?et=3447&m=3437&ct=18338#fbid=sMrXUKBssTv) autour de la marque des 25 minutes. –

Répondre

2

MS utilisé pour fournir des systèmes «prêts à exploiter. Ils sont devenus plus intelligents et prennent la sécurité beaucoup plus au sérieux. Donc, ils désactivent maintenant de nombreuses fonctionnalités par défaut. En ce qui concerne PowerShell, la «stratégie d'exécution» par défaut ne permettait pas l'exécution de scripts. Cependant, sur une ligne de commande, vous pouvez contourner la stratégie d'exécution tous ensemble (sans le changer.) Aussi longtemps que vous êtes autorisé à le faire:

PowerShell -ExecutionPolicy Bypass -file yourfile.ps1

Si vous êtes un administrateur de la machine, il est parfaitement OK pour l'activer et l'utiliser. Si vous êtes juste un propriétaire d'application, vous devriez probablement consulter l'administrateur pour changer la politique, mais comme indiqué ci-dessus, vous n'aurez peut-être pas besoin de le faire.

+2

Je pense que vous lisez trop dans la question et dans les raisons pour lesquelles il est désactivé par défaut. Voici un vieil article de Don Jones qui parle de la façon dont il devrait être mis en production http://technet.microsoft.com/fr-fr/magazine/2007.09.powershell.aspx J. Snower, l'architecte lui-même a discuté de cette question à plusieurs occasions et a expliqué le même raisonnement. –

+0

Dans un environnement géré, vous ne laissez pas de telles décisions à 'utilisateur'. Si OP est juste un propriétaire d'application (nous ne savons pas) alors, je suis d'accord qu'il devrait consulter les administrateurs de la machine, mais ma réponse est générale à un général Q. –

+0

Je vois d'où vous venez, mais l'ensemble La prémisse de 'activation/désactivation' n'est pas réellement correcte. J'ai supposé que les gens comprenaient cela, et ce n'est clairement pas le cas. Alors, laissez-moi essayer de clarifier ma réponse ... –

3

Je n'activerais pas l'exécution globale de scripts sur une machine uniquement parce que votre application souhaite l'utiliser. C'est une décision de politique informatique/sécurité, et ils ne devraient pas être forcés d'accepter votre décision simplement en utilisant votre logiciel. Si vous appelez un espace d'exécution PowerShell à partir d'une application .NET, vous ne devriez pas avoir à vous soucier de la politique d'exécution puisque vous pouvez exécuter vos commandes sans appeler un script .ps1 distinct. Si vous devez appeler powershell.exe et lui donner un fichier de script, regardez -ExecutionPolicy Bypass. About_Executionpolicies dit ceci au sujet de contournement:

 - Nothing is blocked and there are no warnings or 
      prompts. 
 - This execution policy is designed for configurations 
      in which a Windows PowerShell script is built in to a 
      a larger application or for configurations in which 
      Windows PowerShell is the foundation for a program 
      that has its own security model. 
+0

Malheureusement, c'est Java, pas .NET, mais je le penserai quand je coderai en C#. Est-ce que cette option de ligne de commande existe dans toutes les versions de Powershell, parce que quelque part j'ai lu qu'il était seulement disponible à partir de V2. – Andy

+0

C'est probable, même si je ne suis pas sûr. Ils ont fait beaucoup de changements dans V2. En général, la communauté PowerShell considère V1 obsolète à ce stade et la plupart des gens sont à l'aise avec V2. – jbsmith

+0

Je pense qu'il n'est disponible que depuis la version V2, mais je suppose que je vais devoir me fier à Windows Update et afficher une erreur si V2 n'est pas disponible. +1 par le chemin – Andy