在PowerShell中读取单个按键

Ste*_*ven 8 powershell input

使用PowerShell,我想读取按键的值,而无需用户按Enter键.例如,如果用户按下"1",我希望PowerShell脚本在没有"输入"的情况下立即对选择做出反应.

我的研究发现了ReadKey,

$ input = $ Host.UI.RawUI.ReadKey('IncludeKeyDown');

但是ReadKey在字符串中返回的信息比我要求的要多得多:

72,H,0,真

虽然我可以从这个字符串解析按键,但我更喜欢更直接的选择.有人存在吗?

Goy*_*uix 10

也许您可以澄清一点 - 但ReadKey返回KeyInfo对象而不是字符串.KeyInfo包含VirtualKeyCode,Character,ControlKeyState和KeyDown成员 - 输出字符串中的所有字段.事实上,看起来PowerShell刚刚在输出示例中调用了.ToString()方法.您可能希望查看该Character属性以找到您想要的角色.考虑以下示例,我按下1:

$key = $Host.UI.RawUI.ReadKey()
if ($key.Character -eq '1') {
  "Pressed 1"
}
Run Code Online (Sandbox Code Playgroud)

  • 如果其他人正在尝试这个,请注意.ReadKey在Powershell ISE中不起作用. (3认同)

Jac*_*Cat 5

$Host.UI.RawUI.ReadKey('IncludeKeyDown'); 关于Goyuix的使用答案应标记为正确答案。

我发现$Host.UI.RawUI.ReadKey相当长并且想使用[console]

但这是一个错误的决定。这是一个警告。有些人可能知道如何正确使用它。

键将为您提供按某些键的功能

  • 1 = D1
  • 数字键盘上的 1 = 数字键盘 1
  • a = A(仅限大写字母)
  • - = OemMinus(是的

此外,类似的外观[console]::ReadKey将是关键属性。

$key = [console]::ReadKey()
if ($key.Key -eq 'D1') {
  "Pressed 1"
}
Run Code Online (Sandbox Code Playgroud)