Açıklık için buradaki seçimleri özetlemenin / özetlemenin faydalı olacağını düşünüyorum ... daha sonra en iyi faydayı sağladığına inandığım yeni bir varyasyon sunun.
<1> ReadKey (System.Console)
write-host "Press any key to continue..."
[void][System.Console]::ReadKey($true)
- Avantaj: Herhangi bir tuşu kabul eder, ancak Shift, Alt, Ctrl değiştirici tuşlarını uygun şekilde hariç tutar.
- Dezavantaj: PS-ISE'de çalışmaz.
<2> ReadKey (RawUI)
Write-Host "Press any key to continue ..."
$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
- Dezavantaj: PS-ISE'de çalışmaz.
- Dezavantaj: Değiştirici tuşları hariç tutmaz.
<3> cmd
cmd /c Pause | Out-Null
- Dezavantaj: PS-ISE'de çalışmaz.
- Dezavantaj: İlk kullanımda gözle görülür şekilde yeni bir kabuk / pencere açar; sonraki kullanımda fark edilmez, ancak yine de ek yükü vardır
<4> Okuma-Barındırma
Read-Host -Prompt "Press Enter to continue"
- Avantaj: PS-ISE'de çalışır.
- Dezavantaj: Yalnızca Enter tuşunu kabul eder.
<5> ReadKey bileşiği
Bu, Adam's Tech Blogundaki tekliften çıkarılan ISE geçici çözümü / kludge ile yukarıdaki <1> bileşiminin bir bileşimidir ( bu sayfadaki önceki yorumlardan Nick'in izniyle). İkincisi için iki küçük iyileştirme yaptım: Set-StrictMode ( kullanıyorsun , değil mi ?!) kullanıyorsanız bir hatayı önlemek için Test-Yolu ve tuş vuruşunuzdan sonra yeni satır eklemek için son Yazma Ana Bilgisayarı eklendi. doğru yerde istemi.
Function Pause ($Message = "Press any key to continue . . . ") {
if ((Test-Path variable:psISE) -and $psISE) {
$Shell = New-Object -ComObject "WScript.Shell"
$Button = $Shell.Popup("Click OK to continue.", 0, "Script Paused", 0)
}
else {
Write-Host -NoNewline $Message
[void][System.Console]::ReadKey($true)
Write-Host
}
}
- Avantaj: Herhangi bir tuşu kabul eder, ancak Shift, Alt, Ctrl değiştirici tuşlarını uygun şekilde hariç tutar.
- Avantaj: PS-ISE'de çalışır (yalnızca Enter veya fare tıklamasıyla olsa da)
- Dezavantaj: Tek astar değil!