Comment faire pour exécuter PowerShell dans CMD
Je suis en train de lancer un script PowerShell à l'intérieur de cmd ligne de commande. Quelqu'un m'a donné un exemple et il a travaillé:
powershell.exe -noexit "& 'c:\Data\ScheduledScripts\ShutdownVM.ps1'"
Mais le problème est que mon script PowerShell a des paramètres d'entrée, de sorte que j'ai essayé, mais ça ne fonctionne pas:
powershell.exe -noexit "& 'D:\Work\SQLExecutor.ps1 -gettedServerName "MY-PC" ' "
L'erreur est:
Le terme " D:\Work\SQLExecutor.ps1 -gettedServerName "MON PC" ' n'est pas reconnu comme nom d'applet de commande, fonction,
Comment puis-je résoudre ce problème?
- Êtes-vous sûr que vous souhaitez utiliser -noexit ? Cela signifie que lorsque votre script se termine le shell va traîner, éventuellement bloquer l'exécution du fichier de commandes CMD.
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin de séparer les arguments du fichier chemin d'accès:
Une autre option qui peut alléger la syntaxe à l'aide du Fichier de paramètres et les paramètres positionnels:
J'aimerais ajouter ce qui suit à Shay Levy réponse correcte:
Vous pouvez rendre votre vie plus facile si vous créer un petit script batch
run.cmd
pour lancer votre script powershell:Mettre dans le même chemin que
SQLExecutor.ps1
et à partir de maintenant vous pouvez l'exécuter en double-cliquant surrun.cmd
.Remarque:
Si vous avez besoin d'arguments de ligne de commande à l'intérieur de la course.cmd batch, il suffit de les passer comme
%1
...%9
(ou utilisez%*
pour passer tous les paramètres) pour le script powershell, c'est à direpowershell.exe -noexit -file "%batchPath%SQLExecutor.ps1" %*
La variable
batchPath
contient l'exécution de chemin d'accès du fichier de commandes lui-même (c'est ce que l'expression%~dp0
est utilisé pour). Donc, il vous suffit de mettre le script powershell dans le même chemin que l'appelant fichier de commandes.@powershell.exe -noexit -file "%~dp0SQLExecutor.ps1" "MY-PC"
.batchPath
, oui bien sûr vous pouvez le faire. Mais en raison desetlocal
la variable n'a pas tort, puisque la variable de la durée de vie se termine lorsque le script se termine. @NunoAndréEssayez juste d':