J'ai un script PowerShell 1.0 pour simplement ouvrir un tas d'applications. Le premier est une machine virtuelle et les autres sont des applications de développement. Je veux que la machine virtuelle termine le démarrage avant que les autres applications ne soient ouvertes.
En bash je pourrais juste dire "cmd1 && cmd2"
Voilà ce que j'ai ...
C:\Applications\VirtualBox\vboxmanage startvm superdooper
&"C:\Applications\NetBeans 6.5\bin\netbeans.exe"
la source
| out-null
fait exactement ce dont j'avais besoin.Start-Job
J'ai essayé d'utiliser, mais parce que je passe les résultats des fonctions en tant que paramètres, cela m'a un peu déçu, donc je n'ai pas pu utiliser la dernière suggestion ...-ArgumentList
, séparez-les avec des virgules comme-ArgumentList /D=test,/S
.Outre l'utilisation
Start-Process -Wait
, le fait de canaliser la sortie d'un exécutable fera attendre Powershell. En fonction des besoins, je vais généralement conduit àOut-Null
,Out-Default
,Out-String
ouOut-String -Stream
. Voici une longue liste d'autres options de sortie.Je manque les opérateurs de style CMD / Bash que vous avez référencés (&, &&, ||). Il semble que nous devons être plus verbeux avec Powershell .
la source
Out-String
change la sortie en une seule chaîne de plusieurs lignes , tandis que PowerShell renvoie par défaut un tableau de lignes .Start-Process
devrait être évité pour les applications de console (sauf si vous voulez vraiment les exécuter dans une nouvelle fenêtre ) car vous ne pourrez pas capturer ou rediriger leur sortie.Utilisez simplement "Wait-process":
la tâche est finie
la source
Si tu utilises
Start-Process <path to exe> -NoNewWindow -Wait
Vous pouvez également utiliser l'
-PassThru
option pour faire écho à la sortie.la source
-PassThru
ne fait pas écho à la sortie (une application non console par définition ne produira pas de sortie console), il génère uneSystem.Diagnostics.Process
instance qui représente le processus nouvellement lancé, vous pouvez donc examiner ses propriétés et attendre qu'il se termine plus tard.Certains programmes ne peuvent pas très bien traiter le flux de sortie, en utilisant pipe pour
Out-Null
ne pas le bloquer.Et a
Start-Process
besoin du-ArgumentList
commutateur pour passer des arguments, pas si pratique.Il existe également une autre approche.
la source
L'inclusion de 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 de le faire fonctionner était d'appeler:
la source
En allant plus loin, vous pouvez même analyser à la volée
par exemple
la source
Il y a toujours cmd. Cela peut être moins gênant si vous avez du mal à citer des arguments pour démarrer le processus:
la source