Ожидание ввода пользователя с тайм-аутом

Я искал, но, по-видимому, мой google foo слаб. Мне нужен способ запроса пользователя на консоль и время ожидания запроса через некоторое время и продолжить выполнение script, если вход не поступает. Насколько я могу судить, Read-Host не предоставить эту функциональность. Также нет $host.UI.PromptForChoice() и не $host.UI.RawUI.ReadKey(). Спасибо заранее за любые указатели.

EDIT: Большое спасибо Ларсу Труйенсу за то, что он нашел ответ. Я взял код, который он указал, и инкапсулировал его в функцию. Обратите внимание, что способ, которым я его реализовал, означает, что может быть до одной секунды задержки между тем, когда пользователь нажимает клавишу, и когда выполнение script продолжается.

function Pause-Host
{
    param(
            $Delay = 1
         )
    $counter = 0;
    While(!$host.UI.RawUI.KeyAvailable -and ($counter++ -lt $Delay))
    {
        [Threading.Thread]::Sleep(1000)
    }
}

Ответы

Ответ 1

Нашел что-то здесь:

$counter = 0
while(!$Host.UI.RawUI.KeyAvailable -and ($counter++ -lt 600))
{
      [Threading.Thread]::Sleep( 1000 )
}

Ответ 2

Теперь он довольно старый, но как я решил его на основе того же метода KeyAvailable:

https://gist.github.com/nathanchere/704920a4a43f06f4f0d2

Он ожидает x секунд, отображая . для каждой секунды, которая истекает до максимального времени ожидания. Если нажата клавиша, она возвращает $true, иначе $false.

Function TimedPrompt($prompt,$secondsToWait){   
    Write-Host -NoNewline $prompt
    $secondsCounter = 0
    $subCounter = 0
    While ( (!$host.ui.rawui.KeyAvailable) -and ($count -lt $secondsToWait) ){
        start-sleep -m 10
        $subCounter = $subCounter + 10
        if($subCounter -eq 1000)
        {
            $secondsCounter++
            $subCounter = 0
            Write-Host -NoNewline "."
        }       
        If ($secondsCounter -eq $secondsToWait) { 
            Write-Host "`r`n"
            return $false;
        }
    }
    Write-Host "`r`n"
    return $true;
}

И использовать:

$val = TimedPrompt "Press key to cancel restore; will begin in 3 seconds" 3
Write-Host $val