2017-05-02 55 views
2

就像我說的,這個代碼在PowerShell中2版本,但不是在PowerShell中的版本5如何配置讀主機超時在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

我需要像這樣:echo -n「要繼續安裝和配置無視警告鍵入[是],輸入任意鍵退出(安裝後會自動後20秒超時)中止:「 讀-t 20 RESP –

回答

1

official文檔或Read-Host -?會告訴它不是可能以這種方式使用Read-Host。沒有可能的參數告訴它以某種超時運行。

但有various其他questions詳細說明如何在PowerShell(通常使用C#)中做到這一點。

這個想法似乎是檢查用戶何時按下了一個使用$Host.UI.RawUI.KeyAvailable的密鑰並檢查是否超時。

一個簡單的工作示例可能是以下幾點:

$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++ 
} 

你可以使用$host.UI.RawUI.ReadKey得到被按下的鍵。如果您需要比簡單的按鈕按鈕更復雜的輸入,則此解決方案可能不會被接受。另請參見:

+0

$孔特= 0 \t \t寫主機‘要繼續安裝,並忽略配置警告輸入[Y],輸入任何鍵中止’ \t \t而(( - 未$ Host.UI.RawUI.KeyAvailable) - 和($孔特-le 20)){ $ ++孔特開始 睡眠-Seconds 1 }我使用的命令使超時,但它不起作用 –

+0

看看這個例子。它可能會幫助你理解實際發生的事情。我沒有真正明白你的意思是「它不工作」,因爲它沒有什麼信息。 – Seth

+0

感謝您的回答。這個腳本在PowerShell v2.0下正常工作,但是當我用PowerShell 5.1嘗試時,我沒有在PowerShell v2.0中得到相同結果 –

相關問題