Volgens Microsoft’s documentatie, read-host
laat 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-host
wat 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 pause
te emuleren. Dit regelt of Powershell ISE of niet-ISE wordt uitgevoerd. (ReadKey
werkt nietin powershell ISE). Bij het uitvoeren van Powershell ISE opent deze functie een Windows MessageBox
. Dit kan soms verwarrend zijn, omdat de MessageBox
niet 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());