Comment dire à PowerShell d’attendre la fin de chaque commande avant de lancer la suivante ?
Normalement, pour les commandes internes, PowerShell attend bien avant de lancer la commande suivante. Une exception à cette règle concerne les EXE basés sur le sous-système Windows externe. La première astuce consiste à rediriger vers Out-Null comme ceci :
Notepad.exe | Out-Null
PowerShell attendra que le processus Notepad.exe soit terminé avant de continuer. C’est astucieux mais assez subtil à repérer en lisant le code. Vous pouvez également utiliser Start-Process avec le paramètre -Wait :
Start-Process <path to exe> -NoNewWindow -Wait
Si vous utilisez la version des PowerShell Community Extensions, c’est :
$proc = Start-Process <path to exe> -NoNewWindow -PassThru
$proc.WaitForExit()
Une autre option dans PowerShell 2.0 est d’utiliser une tâche en arrière-plan :
$job = Start-Job { invoke command here }
Wait-Job $job
Receive-Job $job