5 votes

Comment configurer un délai d'attente pour Read-Host dans PowerShell ?

Comme je l'ai dit, ce code fonctionne dans PowerShell version 2, mais pas dans PowerShell version 5.

function wait
      {
       $compte = 0
        Write-Host  "To continue installation and ignore configuration warnings      type [y], type any key to abort"
          While(-not $Host.UI.RawUI.KeyAvailable -and ($compte -le 20))
         {
          $compte++
          Start-Sleep -s 1
          }
           if ($compte -ge 20)
           {
        Write-Host "Installation aborted..."
           break
           }
        else
            {
        $key = $host.ui.rawui.readkey("NoEcho,IncludeKeyup")
            }
         if ($key.character -eq "y")
            {Write-Host "Ignoring configuration warnings..."}
         else 
            {Write-Host "Installation aborted..." 
            }}

5voto

Seth Points 783

Le site officiel la documentation ou Read-Host -? dira qu'il n'est pas possible d'utiliser Read-Host de cette manière. Il n'y a pas de paramètre possible pour lui demander de fonctionner avec une sorte de délai d'attente.

Mais il y a divers autre questions détaillant comment faire cela dans PowerShell (en utilisant généralement C#).

L'idée semble être de vérifier si l'utilisateur a appuyé sur une touche en utilisant la fonction $Host.UI.RawUI.KeyAvailable et vérifiez-le pendant la durée de votre délai d'attente.

Un exemple de travail simple pourrait être le suivant :

$secondsRunning = 0;
Write-Output "Press any key to abort the following wait time."
while( (-not $Host.UI.RawUI.KeyAvailable) -and ($secondsRunning -lt 5) ){
    Write-Host ("Waiting for: " + (5-$secondsRunning))
    Start-Sleep -Seconds 1
    $secondsRunning++
}

Vous pourriez utiliser $host.UI.RawUI.ReadKey pour obtenir la touche qui a été pressée. Cette solution ne serait probablement pas acceptable si vous avez besoin d'une entrée plus complexe qu'une simple pression sur un bouton. Voir aussi :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X