Ответ 1
Вот что я использую.
Write-Host -NoNewLine 'Press any key to continue...';
$null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown');
В соответствии с Microsoft документация, read-host
позволяет пользователю ввести некоторый ввод, а затем нажмите клавишу ввода для продолжения. Не совсем правильное поведение, если вы хотите, чтобы "нажмите любую клавишу, чтобы продолжить". (Подождите... где клавиша Any?!)
Есть ли способ сделать это? Что-то вроде read-char
?
Я пробовал искать "одиночный ввод символов" и "вкладка powershell", чтобы узнать, могу ли я найти список всех способов ввода данных без большой удачи. И несколько вопросов, которые выглядели надежно, используют read-host
, который фактически не работает для функциональности "нажмите любую клавишу...".
Вот что я использую.
Write-Host -NoNewLine 'Press any key to continue...';
$null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown');
Я создал небольшую функцию Powershell для эмуляции MSDOS pause
. Это управляет запуском PowerShell ISE или не ISE. (ReadKey
не работает в powershell ISE). При запуске PowerShell ISE эта функция открывает Windows MessageBox
. Иногда это может сбивать с толку, потому что MessageBox
не всегда выходит на первый план. Во всяком случае, вот оно:
Использование:
pause "Press any key to continue"
Определение функции:
Function pause ($message)
{
# Check if running Powershell ISE
if ($psISE)
{
Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.MessageBox]::Show("$message")
}
else
{
Write-Host "$message" -ForegroundColor Yellow
$x = $host.ui.RawUI.ReadKey("NoEcho,IncludeKeyDown")
}
}
Ознакомьтесь с методом ReadKey()
класса System.Console
.NET. Я думаю, что будет делать то, что вы ищете.
http://msdn.microsoft.com/en-us/library/system.console.readkey(v=vs.110).aspx
Пример:
Write-Host -Object ('The key that was pressed was: {0}' -f [System.Console]::ReadKey().Key.ToString());