[System.Console]::ReadKey() でもほとんどのキーを取得することができますが、修飾キー(ShiftやCtrlなど)とその他のキーの組み合わせを取得する関数なので、修飾キー単独では取得できません。
ユーザーの押すキーを取得する
> $key = [System.Console]::ReadKey()
(ここでF1キーを押す)
取得したオブジェクトの型を確認する
> $key.GetType().FullName
System.ConsoleKeyInfo
取得したキーを確認する
> $key.Key
F1
> $key.Key.value__
112
$Host.UI.RawUI.ReadKey() を使うと、すべてのキーを取得することができます。取得できるのはキーの番号なので、System.EnumクラスのGetNameメソッドを使ってConsoleKeyオブジェクトに変換できます。
ユーザーの押すキーを取得する
> $key = $Host.UI.RawUI.ReadKey()
(ここでF1キーを押す)
取得したオブジェクトの型を確認する
> $key.GetType().FullName
System.Management.Automation.Host.KeyInfo
取得したキーを確認する
> $key.VirtualKeyCode
112
> [System.Enum]::GetName([System.ConsoleKey], $key.VirtualKeyCode)
F1