La cmdlet PowerShell Start-Sleep ou l’alias sleep
est une cmdlet simple avec un seul objectif ; mettre en pause un script. Lorsqu’elle est exécutée, dans la console PowerShell, dans un script exécuté par la console ou dans l’ISE PowerShell, la cmdlet met simplement en pause l’exécution d’un script ou d’un module dans la session PowerShell jusqu’à ce que le temps requis en secondes ou en millisecondes se soit écoulé.
Cette cmdlet est simple et pourtant elle peut être appliquée de plusieurs façons différentes qui nous permettront, à nous les scripteurs, de greffer des scripts bien écrits.
Utilisation de Start-Sleep
L’utilisation de la cmdlet Start-Sleep est extrêmement facile puisque, après tout, elle n’a que deux paramètres ! Disons que je veux mettre mon script en pause parce que j’attends l’exécution d’un autre processus environnemental. Ce processus prend environ 10 secondes, et je dois être sûr que mon script ne continue pas à s’exécuter avant que cet événement externe ne soit terminé.
Pour mettre le script en pause pendant 10 secondes, j’utiliserais simplement Start-Sleep -Second 10
. Si je veux être anal sur les choses, je pourrais également spécifier le temps en millisecondes comme Start-Sleep -Milliseconds 10000.
Exemple de contexte
L’une des utilisations les plus courantes de ce cmdlet Start-Sleep est à l’intérieur d’une boucle while
. Une boucle while
est une construction dans PowerShell qui exécute du code pendant que quelque chose d’autre se passe. L’une des meilleures utilisations d’une boucle while
est d’attendre que quelque chose d’autre se produise. Plutôt que de simplement deviner combien de temps un processus va prendre et d’exécuter directement cette cmdlet.
Par exemple, peut-être avez-vous besoin d’attendre qu’un fichier apparaisse dans un dossier. Peut-être que ce fichier est déposé là par un autre logiciel. Une fois que le fichier est dans le dossier, vous devez exécuter du code contre lui. Cet exemple est un excellent exemple d’utilisation d’une boucle while
et de Start-Sleep
.
Dans l’exemple ci-dessous, mon code attend que le fichier C:\File.txt
apparaisse. Si cela était dans un script, il mettrait le script en pause jusqu’à ce que cet événement se produise. Techniquement, nous n’avons pas besoin de Start-Sleep
pour faire cela, mais s’il n’est pas utilisé, ce code pourrait paralyser votre ordinateur. La vitesse à laquelle il pourrait continuellement vérifier ce fichier dépendrait de PowerShell!
Nous n’avons pas besoin de vérifier ce fichier tous les .0455ms. Au lieu de cela, nous devrions ralentir cette vérification et n’effectuer le test que toutes les cinq secondes. Ralentir une boucle while est une excellente utilisation de la commande Start-Sleep
.
$filePath = 'C:\File.txt'while (-not (Test-Path -Path $filePath)) { ## Wait a specific interval Start-Sleep -Seconds 5}
Pour un exemple d’utilisation de cette cmdlet avec une belle barre de progression, regardez ceci.