Saya pikir ada gunanya merangkum / meringkas pilihan di sini untuk kejelasan ... kemudian menawarkan variasi baru yang saya percaya memberikan utilitas terbaik.
<1> ReadKey (System.Console)
write-host "Press any key to continue..."
[void][System.Console]::ReadKey($true)
- Keuntungan: Menerima tombol apa saja tetapi dengan tepat mengecualikan tombol pengubah Shift, Alt, Ctrl.
- Kerugian: Tidak berfungsi di PS-ISE.
<2> ReadKey (RawUI)
Write-Host "Press any key to continue ..."
$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
- Kerugian: Tidak berfungsi di PS-ISE.
- Kerugian: Tidak mengecualikan kunci pengubah.
<3> cmd
cmd /c Pause | Out-Null
- Kerugian: Tidak berfungsi di PS-ISE.
- Kerugian: Terlihat meluncurkan shell / jendela baru pada penggunaan pertama; tidak terlihat pada penggunaan selanjutnya tetapi masih memiliki overhead
<4> Host-Baca
Read-Host -Prompt "Press Enter to continue"
- Keuntungan: Bekerja di PS-ISE.
- Kerugian: Hanya menerima tombol Enter.
<5> Komposit ReadKey
Ini adalah gabungan dari <1> di atas dengan solusi ISE / kludge yang diambil dari proposal di Blog Teknologi Adam (atas izin Nick dari komentar sebelumnya di halaman ini). Saya membuat dua perbaikan kecil pada yang terakhir: menambahkan Test-Path untuk menghindari kesalahan jika Anda menggunakan Set-StrictMode (Anda melakukannya, bukan ?!) dan Write-Host terakhir untuk menambahkan baris baru setelah penekanan tombol Anda untuk meletakkan cepat di tempat yang tepat.
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
}
}
- Keuntungan: Menerima tombol apa saja tetapi dengan tepat mengecualikan tombol pengubah Shift, Alt, Ctrl.
- Keuntungan: Bekerja di PS-ISE (meskipun hanya dengan Enter atau klik mouse)
- Kerugian: Bukan one-liner!