Powershell $ Host.UI.ReadKey()菜单循环 - 密钥未重置

时间:2015-01-23 12:36:09

标签: loops powershell menu key

我创建了几个用于执行多个作业的菜单脚本。但他们都有同样的问题:

当您按某个键时,它的作业不会执行一次,而是执行两次甚至三次

我的代码如下:

Function Write-Menu{
Write-Host ""
Write-Host -BackgroundColor Black -NoNewline "Enter"; Write-Host " Job description"
Write-Host ""
Write-Host ""
Write-Host -BackgroundColor Black -NoNewline "  A  "; Write-Host " Job 2 description"
Write-Host ""
Write-Host -BackgroundColor Black -NoNewline "  B  "; Write-Host " Job 3 description"
Write-Host ""
Write-Host -BackgroundColor Black -NoNewline "  C  "; Write-Host " etc.."
}
Write-Menu
Do {
$key = $null
$key = $Host.UI.RawUI.ReadKey()
Sleep -Milliseconds 250
If ($key.Character -eq 13) {
    #Do Something..
}
If ($key.Character -eq etc) {
    #etc..
}
Clear-Host
Write-Menu
} Until(!($CloseMenu = "false"))

我已经尝试了一切来阻止它,但没有解决这个问题。我也没有看到其他人遇到过这个问题..

无论延迟/休眠时间如何,似乎都会将您按下的键代码保存为2或3个循环,该变量将被清除/重置,无论其中包含什么代码。即使我开始一个8小时后关闭的java进程仍然会这样做。我不知道为什么会发生这种情况。

只关闭菜单似乎运作良好^^

我想过以不同的方式设置循环,但我无法想到任何设置。我能帮忙吗?感谢

1 个答案:

答案 0 :(得分:3)

$Host.UI.RawUI.ReadKey()读取按键,按键释放,两者的组合,并可以在控制台上显示它们,因此你的" 2-3键"读取。

要更好地控制其行为,您可以使用options参数,该参数是以下一项或多项的位掩码:

  IncludeKeyDown 
  IncludeKeyUp
  NoEcho

传递" NoEcho,IncludeKeyDown"对于ReadKey,你基本上是在告诉它忽略关键事件,而不是回应任何东西。

更多相关信息:Source from MSDN