<p>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 <a href="https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/out-null"><code>Out-Null</code></a> comme ceci :</p>
<pre><code class="lang-auto">Notepad.exe | Out-Null
</code></pre>
<p>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 <a href="https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.management/start-process"><code>Start-Process</code></a> avec le paramètre <code>-Wait</code> :</p>
<pre><code class="lang-auto">Start-Process <path to exe> -NoNewWindow -Wait
</code></pre>
<p>Si vous utilisez la version des PowerShell Community Extensions, c’est :</p>
<pre><code class="lang-auto">$proc = Start-Process <path to exe> -NoNewWindow -PassThru
$proc.WaitForExit()
</code></pre>
<p>Une autre option dans PowerShell 2.0 est d’utiliser une <a href="https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_jobs">tâche en arrière-plan</a> :</p>
<pre><code class="lang-auto">$job = Start-Job { invoke command here }
Wait-Job $job
Receive-Job $job
</code></pre>