Вам нужно создать функцию, которая будет ожидать нажатия клавиш и обрабатывать ввод, не требуя нажатия клавиши "Enter". Логика вашей функции должна сохранять часть, связанную с ожиданием ввода клавиш, и возвращать, какую клавишу нажал пользователь.
Вот пример функции `Wait-ForUserInput`, которая ожидает нажатие клавиш и обрабатывает ваш ввод, а также пример того, как использовать эту функцию:
```powershell
function Wait-ForUserInput {
param (
[string]$message = "Press Enter to execute",
[string]$returnMessage = "Press 0 to return"
)
Write-Host $message -ForegroundColor Green
Write-Host $returnMessage -ForegroundColor Green
$inputKey = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
if ($inputKey.Character -eq "0") {
return "Return" # Возвращает специальный флаг для обработки
} elseif ($inputKey.Character -eq "`r") {
return "Execute" # Возвращает флаг для выполнения функции
}
return $null # Возвращает null, если была нажата другая клавиша
}
# Пример использования
while ($true) {
Clear-Host
$choice = Wait-ForUserInput
if ($choice -eq "Return") {
break # Выход из меню
} elseif ($choice -eq "Execute") {
Start-Sleep -Seconds 1
Write-Host "Executing DriverI function..."
DriverI # Вызов функции
Pause
}
}
```
### Объяснение кода:
1. **Функция `Wait-ForUserInput`**:
- Принимает два параметра: сообщения для отображения пользователю.
- Использует `RawUI.ReadKey` для получения нажатия клавиш без необходимости нажатия "Enter".
- Возвращает строки "Return" или "Execute" в зависимости от нажатой клавиши, чтобы можно было обрабатывать ввод в главном цикле.
2. **Основной цикл**:
- Вызывает функцию `Wait-ForUserInput` и сохраняет результат в переменную `$choice`.
- Если возвращается "Return", цикл прерывается, что позволяет выйти в главное меню.
- Если возвращается "Execute", выполняется заданная функция, например, `DriverI`.
Таким образом, ваша программа более структурирована, и процесс обработки клавиш вынесен в отдельную функцию, что уменьшает дублирование кода.