Comment dire PowerShell attendre, pour chaque commande à la fin avant de commencer la suivante?
J'ai un script PowerShell 1.0 qu'à ouvrir un tas d'applications. La première est une machine virtuelle et les autres sont des applications de développement. Je veux que la machine virtuelle pour finir de démarrer avant que le reste de l'applications sont ouvertes.
En bash, je pourrais juste dire "cmd1 && cmd2"
C'est ce que j'ai...
C:\Applications\VirtualBox\vboxmanage startvm superdooper
&"C:\Applications\NetBeans 6.5\bin\netbeans.exe"
Vous devez vous connecter pour publier un commentaire.
Normalement, pour les commandes internes PowerShell attendre avant de commencer la prochaine commande. Une exception à cette règle est l'extérieur des Fenêtres du sous-système de base de EXE. La première astuce est de pipeline à
Out-Null
comme suit:PowerShell va attendre jusqu'à ce que le Notepad.exe le processus a été arrêtée avant de continuer. C'est chouette mais un peu subtile pour ramasser de la lecture du code. Vous pouvez également utiliser les Start-Processus-de l'Attendre paramètre:
Si vous êtes en utilisant le PowerShell Communauté des Extensions de la version c'est:
Une autre option dans PowerShell 2.0 est d'utiliser un arrière-plan de l'emploi:
| out-null
fait juste ce dont j'avais besoin. Essayé d'utiliserStart-Job
mais parce que je suis de passage les résultats des fonctions en tant que paramètres, c'est un peu skitzoid sur moi, donc je ne pouvais pas utiliser la dernière suggestion...-ArgumentList
, séparez-les par des virgules, comme-ArgumentList /D=test,/S
.Outre l'utilisation de
Start-Process -Wait
, de la tuyauterie de sortie d'un exécutable fera Powershell attendre. Selon le besoin, je vais généralement pipe àOut-Null
,Out-Default
,Out-String
ouOut-String -Stream
. Ici est une longue liste de quelques-uns des autres options de sortie.Je ne manquez pas le CMD/Bash style opérateurs que vous avez référencé (&, &&, ||). Il
paraît que nous devons être plus de commentaires avec Powershell.
Juste de l'utilisation d'Attente "processus" :
travail est fait
Si vous utilisez
Start-Process <path to exe> -NoNewWindow -Wait
Vous pouvez également utiliser le
-PassThru
option de sortie écho.Certains programmes ne peut pas traiter les flux de sortie très bien, à l'aide de tuyaux à
Out-Null
ne peut pas bloquer.Et
Start-Process
besoins de la-ArgumentList
commutateur pour passer des arguments, pas si facile.Il y a aussi une autre approche.
Y compris l'option
-NoNewWindow
me donne une erreur:Start-Process : This command cannot be executed due to the error: Access is denied.
La seule façon que je pouvais le faire fonctionner a l'appel de:
Aller plus loin vous pouvez même analyser à la volée
par exemple