2017-05-02 2 views
2

Comme je l'ai dit, ce code fonctionne dans la version PowerShell 2, mais pas dans la version PowerShell 5.Comment configurer un délai d'attente pour la lecture Host dans PowerShell

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..." 
      }} 
+0

i besoin de quelque chose comme ceci: echo -n « Pour poursuivre l'installation et ignorer les avertissements de configuration type [oui], tapez une touche pour annuler (l'installation sera automatiquement abort après 20 ans timeout): " lu 20 resp -t –

Répondre

1

La documentation official ou Read-Host -? va dire que ce n'est pas possible d'utiliser Read-Host de cette manière. Il n'y a pas de paramètre possible pour le faire fonctionner avec une sorte de timeout.

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

L'idée semble être de vérifier à chaque fois que l'utilisateur appuie sur une touche en utilisant $Host.UI.RawUI.KeyAvailable et de le vérifier pendant la durée de votre timeout.

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 pouvez utiliser $host.UI.RawUI.ReadKey pour obtenir la clé qui a été pressé. Cette solution ne serait probablement pas acceptable si vous avez besoin d'une entrée plus complexe qu'un simple appui sur un bouton. Voir aussi:

+0

$ = 0 compte \t \t Write-Host "pour continuer l'installation et ne tiennent pas compte des avertissements de configuration de type [y], tapez une touche pour abandonner" \t \t while ((- pas Host.UI.RawUI.KeyAvailable $) -et (de $ compte 20 -le)) { $ ++ Démarrer compte-sommeil -seconds 1 } i utiliser la commande pour faire un temps mort mais ne fonctionne pas –

+0

Jetez un oeil à l'exemple. Cela pourrait vous aider à comprendre ce qui se passe réellement. Je ne comprends pas vraiment ce que vous entendez par "ça ne marche pas" car cela a peu d'informations. – Seth

+0

merci pour votre réponse. ce script fonctionne bien avec powershell v2.0 mais quand je l'essaie avec powershell 5.1 je n'ai pas le même résultat –