Attendez que chaque commande se termine dans PowerShell

Marion Paul Kenneth Mendoza 30 janvier 2023
  1. Utilisation des commandes Out pour attendre la fin de chaque commande dans PowerShell
  2. Utilisation de la cmdlet Start-Process pour attendre la fin de chaque commande dans PowerShell
  3. Utilisation de tâches en arrière-plan pour attendre la fin de chaque commande dans PowerShell
  4. Utilisation de la cmdlet Wait-Process pour attendre la fin de chaque commande dans PowerShell
  5. Utilisation de la classe [Diagnostics.Process] pour attendre la fin de chaque commande dans PowerShell
Attendez que chaque commande se termine dans PowerShell

En règle générale, Windows PowerShell attend les commandes internes avant de lancer la commande suivante.

Une exception à cette règle est le fichier EXE externe basé sur le sous-système Windows. De plus, Windows PowerShell n’attend pas la fin des commandes lors de l’exécution de programmes exécutables.

Cet article vous montrera comment forcer l’environnement Windows PowerShell à attendre que les commandes avec les fichiers exécutables se terminent avant de passer à la commande suivante.

Utilisation des commandes Out pour attendre la fin de chaque commande dans PowerShell

Comme mentionné, l’exécution d’un fichier exécutable n’attendra pas la fin de la commande et passera directement à la commande suivante. Nous devrons peut-être éviter cela, surtout si nous créons un script qui doit exécuter les applications de manière séquentielle.

Une astuce consiste à utiliser l’une des commandes Out comme Out-Null. Lors de l’exécution d’une application, diriger la cmdlet Out-Null. incitera Windows PowerShell à exécuter une cmdlet sous-jacente au-dessus de l’application en cours d’exécution.

N’oubliez pas que la cmdlet Out-Null n’affiche rien dans la console, ce qui la fait ressembler à une application standard en cours d’exécution. La seule différence est qu’il attend que toute la ligne de commande s’exécute.

Exemple de code :

Notepad.exe | Out-Null

D’autres exemples de commandes Out que nous pouvons utiliser sont les suivants :

  • Out-Default - Envoie la sortie à l’environnement de format par défaut et à la cmdlet de sortie par défaut.
  • Out-File - Envoie la sortie vers un fichier.
  • Out-GridView - Envoie la sortie à une table interactive dans une fenêtre séparée.
  • Out-Host - Envoie la sortie à la ligne de commande.
  • Out-Printer - Envoie la sortie à une imprimante.
  • Out-String - Envoie des objets à l’hôte sous la forme d’une série de chaînes.

Utilisation de la cmdlet Start-Process pour attendre la fin de chaque commande dans PowerShell

Une autre méthode permettant à Windows PowerShell d’attendre la fin de la ligne de commande est la cmdlet Start-Process.

Par exemple, nous pouvons utiliser le paramètre -Wait de la cmdlet Start-Process, et Windows PowerShell attendra la fin du processus avant d’exécuter la ligne de commande suivante.

Start-Process notepad.exe -NoNewWindow -Wait

Remarque : Le paramètre -NoNewWindow dans l’exemple ci-dessus démarrera le processus en cours sans ouvrir une nouvelle fenêtre de console.

À l’aide des versions d’extension de la communauté PowerShell, un nouvel objet est d’abord créé. Une fois l’objet créé, la fonction WaitForExit() est appelée.

$proc = Start-Process notepad.exe -NoNewWindow -PassThru
$proc.WaitForExit()

Utilisation de tâches en arrière-plan pour attendre la fin de chaque commande dans PowerShell

Une autre méthode permettant à Windows PowerShell d’attendre la fin de la ligne de commande consiste à utiliser une tâche en arrière-plan.

Une tâche en arrière-plan est une commande ou un ensemble de commandes exécutées dans un processus distinct sur la machine locale. Un exemple de syntaxe d’une tâche d’arrière-plan est présenté ci-dessous.

$job = Start-Job { notepad.exe }
Wait-Job $job
Receive-Job $job

L’appel de la cmdlet Wait-Job fera attendre le processus jusqu’à ce que Receive-Job soit appelé dans la ligne de commande.

Utilisation de la cmdlet Wait-Process pour attendre la fin de chaque commande dans PowerShell

Une autre méthode permettant à Windows PowerShell d’attendre la fin de la ligne de commande est la cmdlet Wait-Process.

Comme dans notre premier exemple, nous pouvons diriger cela dans notre fichier exécutable et attendre que la ligne de commande se termine. Cependant, l’utilisation de cette cmdlet ne fonctionne que sur les versions 5.1 et inférieures de Windows PowerShell et ne fonctionnera pas avec la dernière version de PowerShell (Core) 7.

Notepad.exe | Wait-Process

Utilisation de la classe [Diagnostics.Process] pour attendre la fin de chaque commande dans PowerShell

Si vous avez une bibliothèque .NET installée sur votre système, vous pouvez utiliser la classe [Diagnostics.Process] pour attendre la fin de vos processus avant de passer à la ligne de commande suivante.

Cependant, nous ne recommandons pas de l’utiliser car d’autres cmdlets plus simples sont disponibles dans Windows PowerShell que nous pouvons pleinement utiliser. N’utilisez les bibliothèques .NET que si les commandes PowerShell ne sont pas disponibles.

[Diagnostics.Process]::Start('notepad.exe').WaitForExit()
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn