Tôi nghĩ rất đáng để tóm tắt / tóm tắt các lựa chọn ở đây cho rõ ràng ... sau đó đưa ra một biến thể mới mà tôi tin rằng cung cấp tiện ích tốt nhất.
<1> ReadKey (System.Console)
write-host "Press any key to continue..."
[void][System.Console]::ReadKey($true)
- Ưu điểm: Chấp nhận bất kỳ phím nào nhưng loại trừ đúng các phím bổ trợ Shift, Alt, Ctrl.
- Nhược điểm: Không hoạt động trong PS-ISE.
<2> ReadKey (RawUI)
Write-Host "Press any key to continue ..."
$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
- Nhược điểm: Không hoạt động trong PS-ISE.
- Nhược điểm: Không loại trừ các phím bổ trợ.
<3> cmd
cmd /c Pause | Out-Null
- Nhược điểm: Không hoạt động trong PS-ISE.
- Nhược điểm: Dễ thấy sẽ khởi chạy trình bao / cửa sổ mới trong lần sử dụng đầu tiên; không đáng chú ý khi sử dụng tiếp theo nhưng vẫn có chi phí
<4> Máy chủ đọc
Read-Host -Prompt "Press Enter to continue"
- Ưu điểm: Hoạt động trong PS-ISE.
- Nhược điểm: Chỉ chấp nhận phím Enter.
<5> hỗn hợp ReadKey
Đây là kết hợp của <1> ở trên với cách giải quyết ISE / k bùn được trích xuất từ đề xuất trên Blog Công nghệ của Adam (được sự cho phép của Nick từ các nhận xét trước đó trên trang này). Tôi đã thực hiện hai cải tiến nhỏ cho cái sau: thêm Đường dẫn kiểm tra để tránh lỗi nếu bạn sử dụng Chế độ đặt-Nghiêm ngặt (đúng không?!) Và Máy chủ ghi cuối cùng để thêm một dòng mới sau lần nhấn phím của bạn để đặt nhắc nhở đúng chỗ.
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
}
}
- Ưu điểm: Chấp nhận bất kỳ phím nào nhưng loại trừ đúng các phím bổ trợ Shift, Alt, Ctrl.
- Ưu điểm: Hoạt động trong PS-ISE (mặc dù chỉ với Enter hoặc nhấp chuột)
- Nhược điểm: Không phải là một lớp lót!