Druk op een willekeurige toets om door te gaan

Volgens Microsoft’s documentatie, read-hostlaat de gebruiker wat invoer typen en druk vervolgens op enter om door te gaan. Niet bepaald het juiste gedrag als u “Druk op een willekeurige toets om door te gaan” wilt hebben. (Wacht… waar is de Anysleutel?!)

Is er een manier om dit te bereiken? Iets als read-char?

Ik heb geprobeerd te zoeken naar “invoer van één teken” en “powershell-invoer” om te zien of ik een lijst kon vinden met alle manieren om invoer te krijgen zonder veel geluk. En verschillende Stack Overflow-vragen die er hoopvol uitzagen, gebruiken read-hostwat eigenlijk nietwerkt voor de “druk op een toets…”-functionaliteit.


Antwoord 1, autoriteit 100%

Dit is wat ik gebruik.

Write-Host -NoNewLine 'Press any key to continue...';
$null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown');

Antwoord 2, autoriteit 33%

Ik heb een kleine Powershell-functie gemaakt om MSDOS pausete emuleren. Dit regelt of Powershell ISE of niet-ISE wordt uitgevoerd. (ReadKeywerkt nietin powershell ISE). Bij het uitvoeren van Powershell ISE opent deze functie een Windows MessageBox. Dit kan soms verwarrend zijn, omdat de MessageBoxniet altijd op de voorgrond komt. Hoe dan ook, hier gaat het:

Gebruik:
pause "Press any key to continue"

Functiedefinitie:

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")
    }
}

Antwoord 3, autoriteit 20%

Bekijk de ReadKey()methode in de System.Console.NET klasse. Ik denk dat dat zal doen wat je zoekt.

http://msdn .microsoft.com/en-us/library/system.console.readkey(v=vs.110).aspx

Voorbeeld:

Write-Host -Object ('The key that was pressed was: {0}' -f [System.Console]::ReadKey().Key.ToString());

Other episodes