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

Mys*_*yst 3 powershell loops 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"))
Run Code Online (Sandbox Code Playgroud)

我已尽一切努力阻止它,但没有任何方法可以解决此问题。我也没有看到其他人遇到这个问题。

似乎可以将您的按键代码保存2或3个循环,而不管延迟/睡眠时间,变量是否被清除/重置以及其中包含什么代码。即使我启动了一个在8小时后关闭的Java进程,它仍然会这样做。我不知道为什么会这样。

仅关闭菜单似乎效果很好^^

我曾考虑过以不同的方式设置循环,但我没有想到任何设置。我可以帮忙吗?谢谢

Mic*_*lli 5

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

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

  IncludeKeyDown 
  IncludeKeyUp
  NoEcho
Run Code Online (Sandbox Code Playgroud)

通过将“ NoEcho,IncludeKeyDown”传递给ReadKey,您基本上是在告诉它忽略按键启动事件,而不回显任何内容。

有关此的更多信息:来自MSDN的源