Задать вопрос
@passstrada

Как сделать отдельную функцию для нажатия клавиш на PowerShell?

Есть меню где я вызываю цифрами функции, которые уже написаны у меня.
Вызов выглядит как-то так:
Write-Host "Press Enter to execute" -ForegroundColor Green
Write-Host "Or 0 to return" -ForegroundColor Green
$key = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
if ($key.Character -eq "0") {
	Clear-Host
	break
} elseif ($key.Character -eq "`r") {
	Start-Sleep -Seconds 1
	Write-Host
	DriverI #Функция
	pause
	Clear-Host
	break
}

Суть кода в том что перед началом выполнения функции высвечивается небольшое описание и надпись, "нажмите клавишу что бы выполнить или 0 для возврата в главное меню".
Теперь такой вопрос, у меня таких строк полно меняется только функция внутри, как мне создать отдельную функцию?

п.с. пытался уже вынести $key = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") но он постоянно ждёт от пользователя ввод, создавал уже отдельно такое:
function Wait-ForUserInput {
	Write-Host "Press Enter to execute" -ForegroundColor Green
	Write-Host "Press 0 then enter to return" -ForegroundColor Green
    $inputKey = Read-Host

    if ($inputKey -eq "0") {
        break
    }
}

Но мне он не понравился из-за того что нужно все время нажимать Enter после того как ввел 0
  • Вопрос задан
  • 146 просмотров
Подписаться 2 Простой Комментировать
Решения вопроса 1
@passstrada Автор вопроса
покумекал что-то придумал
создаем функцию:
function Wait-ForUserInput {
    Write-Host "Press Enter to execute" -ForegroundColor Green
    Write-Host "Or 0 to return" -ForegroundColor Green
    
    $key = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
    
    if ($key.Character -eq "0") {
        Clear-Host
        return  # Возвращение в меню
    } elseif ($key.Character -eq "`r") {
        Start-Sleep -Seconds 1
        Write-Host
        & $script  # Вызов функции
        Read-Host "Press Enter to continue"
        Clear-Host
        return
    }
}


а в меню будем писать:

$script = { DriverB }
Wait-ForUserInput
$script = $null

где просто будем менять функцию DriverB
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы