Comment exécuter un script PowerShell

712

Comment exécuter un script PowerShell?

  • J'ai un script nommé myscript.ps1
  • J'ai tous les frameworks nécessaires installés
  • Je mets que la politique d'exécution chose
  • J'ai suivi les instructions sur cette page d'aide MSDN et j'essaie de l'exécuter comme suit : powershell.exe 'C:\my_path\yada_yada\run_import_script.ps1'(avec ou sans --noexit)

qui ne renvoie exactement rien, sauf que le nom du fichier est sorti.

Aucune erreur, aucun message, rien. Oh, quand j'ajoute -noexit, la même chose se produit, mais je reste dans PowerShell et je dois quitter manuellement.

Le fichier .ps1 est censé exécuter un programme et renvoyer le niveau d'erreur en fonction de la sortie de ce programme. Mais je suis sûr que je n'y arrive même pas encore.

Qu'est-ce que je fais mal?

Pekka
la source
2
Démarrez le powershellcomme vous auriez commencé cmd. Maintenant, vous pouvez exécuter le myscript.ps1script comme n'importe quel exécutable dans (dans la fenêtre .\myscript.ps1
PowerShell

Réponses:

733
  1. Lancez Windows PowerShell et attendez un instant que l' PSinvite de commande apparaisse
  2. Accédez au répertoire où réside le script

    PS> cd C:\my_path\yada_yada\ (enter)
  3. Exécutez le script:

    PS> .\run_import_script.ps1 (enter)

Qu'est-ce que je rate??

Ou: vous pouvez exécuter le script PowerShell cmd.execomme ceci:

powershell -noexit "& ""C:\my_path\yada_yada\run_import_script.ps1""" (enter)

selon cet article de blog ici

Ou vous pouvez même exécuter votre script PowerShell à partir de votre application C # :-)

Exécuter de manière asynchrone des scripts PowerShell à partir de votre application C #

marc_s
la source
19
Le lien de votre article de blog l'a fait. Je dois utiliser powershell -noexit "& "C:\yada_yada\run_import_script.ps1"(remarquez les trois guillemets doubles) Je ne comprends pas vraiment pourquoi, mais à ce stade, je m'en fiche vraiment :) Merci beaucoup!
Pekka
16
Que fait-il exactement "&?
BlueRaja - Danny Pflughoeft
16
Selon technet.microsoft.com/en-us/library/ee176949.aspx , le '&' est pour "Si vous voulez réellement exécuter cette valeur de chaîne (c'est-à-dire, si vous voulez exécuter le script dont le chemin est inclus dans entre guillemets), vous devez faire précéder le chemin d'accès de l'opérateur Call (l'esperluette). "
Doug Dawson
29
rien de tout cela n'a fonctionné pour moi jusqu'à ce que je contourne la politique d'exécution par défaut de powershell pour mon script non signé fraîchement créé. Cela a notamment nécessité le redémarrage de powershell en tant qu'administrateur. Entièrement d'accord avec @LukePuplett - c'est génial de faire en sorte que le cas d'utilisation le plus simple prenne 20 minutes de recherche et de futzing. Et les messages d'erreur! Apparemment, ces gars-là travaillaient chez IBM ... dans les années 70.
Spike0xff
15
Comme indiqué dans un commentaire ci-dessous, la politique d'exécution doit être contournée. L'un des éléments qui n'est pas abordé ici est de savoir comment exécuter un script PowerShell à partir d'une ligne de commande en passant un paramètre. Pour ce faire: tapezpowershell -executionpolicy bypass ".\myscript.ps1 yadayadayada"
Jim Lahman
230

Si vous utilisez PowerShell 2.0, utilisez le -Fileparamètre PowerShell.exe pour appeler un script à partir d'un autre environnement, comme cmd.exe. Par exemple:

Powershell.exe -File C:\my_path\yada_yada\run_import_script.ps1
Keith Hill
la source
5
Existe-t-il un moyen d'ajouter des paramètres à une telle invocation?
Alexander Groß
11
Vous devriez juste pouvoir suivre les arguments après le chemin du fichier de script. De l'utilisation de PowerShell.exe - [-File <filePath> <args>]
Keith Hill
"ne peut pas être chargé car l'exécution des scripts est désactivée sur ce système. Veuillez consulter" get-help about_signing "pour plus de détails."
Pavel Vlasov
7
Si vous n'avez pas activé l'exécution du script PowerShell sur votre système, ajoutez le paramètre-ExecutionPolicy Bypass
Keith Hill
4
Pour info, cela fonctionne également pour PowerShell 1.0 dans mon expérience (Windows 2012 Server)
knocte
189

Si vous souhaitez exécuter un script sans modifier la stratégie d'exécution de script par défaut, vous pouvez utiliser le commutateur de contournement lors du lancement de Windows PowerShell .

powershell [-noexit] -executionpolicy bypass -File <Filename>
Chingiz Musayev
la source
11
-nologo
Incluez
73

Type:

powershell -executionpolicy bypass -File .\Test.ps1

REMARQUE: voici Test.ps1le script PowerShell.

Sudheesh
la source
Cela devrait être exécuté dans un PowerShell car en powershell -executionpolicy bypass -File .\Test.ps1supposant que votre répertoire de travail actuel contient Test.ps1
Yeow_Meng
29

J'ai eu le même problème, et j'ai essayé et essayé ... Enfin j'ai utilisé:

powershell.exe -noexit "& 'c:\Data\ScheduledScripts\ShutdownVM.ps1'"

Et mettez cette ligne dans un fichier batch, et cela fonctionne.

Dennis
la source
22

Si vous n'avez que PowerShell 1.0 , cela semble assez bien faire l'affaire:

powershell -command - < c:\mypath\myscript.ps1

Il dirige le fichier de script vers la ligne de commande PowerShell.

AndyM
la source
3
Astuce utile lorsque les politiques de sécurité ne permettent pas l'exécution de scripts.
Aron Lorincz
17

Plutôt facile. Cliquez avec le bouton droit sur le fichier .ps1 dans Windows et dans le menu du shell, cliquez sur Exécuter avec PowerShell .

électronictonique
la source
Cela fonctionne pour exécuter rapidement un script sans avoir à activer l'exécution de scripts avec une stratégie d'exécution. Merci!
b01
C'est ce que je cherchais, merci!
Aamol
11

Utilisation du fichier cmd (BAT):

@echo off
color 1F
echo.

C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -File "PrepareEnvironment.ps1"

:EOF
echo Waiting seconds
timeout /t 10 /nobreak > NUL

Si vous devez exécuter en tant qu'administrateur :

  1. Faire un raccourci pointé vers l'invite de commande (je l'ai nommé invite de commande administrative)
  2. Ouvrez les propriétés du raccourci et accédez à l'onglet Compatibilité
  3. Dans la section Niveau de privilège, assurez-vous que la case à côté de «Exécuter ce programme en tant qu'administrateur» est cochée
Kiquenet
la source
11

Un moyen simple est d'utiliser PowerShell ISE , d'ouvrir un script, d'exécuter et d'appeler votre script, votre fonction ...

Entrez la description de l'image ici

Jose Evaristo Cepeda Barrera
la source
10

Si votre script est nommé avec l' .ps1extension et que vous êtes dans une fenêtre PowerShell, vous exécutez simplement ./myscript.ps1(en supposant que le fichier se trouve dans votre répertoire de travail).

De toute façon, cela est vrai pour moi sur Windows 10 avec PowerShell version 5.1, et je ne pense pas avoir fait quoi que ce soit pour le rendre possible.

rainabba
la source
2
Comment cela répond-il à la question?
Peter Mortensen
4
il répond absolument à la question: comment exécuter un script PowerShell? réponse: démarrage de la console powershell, puis exécution du script. facile. Facile. Fonctionne également sur Linux.
Thufir
4
Cela répond absolument à la question, et c'était exactement ce que je cherchais. comme myscript.ps1n'a pas fonctionné, a jeté une erreur, mais avec ./son exécution.
Jeff
7
  • Donnez le chemin du script, c'est-à-dire la définition du chemin par cmd:

    $> . c:\program file\prog.ps1

  • Exécutez la fonction de point d'entrée de PowerShell:

    Par exemple, $> add or entry_func or main

pkm
la source
Exécution de vos commandes à partir d'une invite cmd: >$ . c:\program file\prog.ps1 '.' is not recognized as an internal or external command, operable program or batch file.et>$ add or entry_func or main 'add' is not recognized as an internal or external command, operable program or batch file.
Suncat2000
1

Utilisez le -Fileparamètre devant le nom de fichier. Les guillemets font penser à PowerShell qu'il s'agit d'une chaîne de commandes.

Ingénieur
la source
1

J'ai une réponse très simple qui fonctionne:

  1. Ouvrez PowerShell en mode administrateur
  2. Courir: set-executionpolicy unrestricted
  3. Ouvrez une fenêtre PowerShell standard et exécutez votre script.

J'ai trouvé cette solution en suivant le lien fourni dans le cadre du message d'erreur: À propos des stratégies d'exécution

solstinger
la source