ฉันคิดว่ามันคุ้มค่าที่จะสรุป / สรุปตัวเลือกที่นี่เพื่อความชัดเจน ... จากนั้นเสนอรูปแบบใหม่ที่ฉันเชื่อว่าให้ประโยชน์สูงสุด
<1> ReadKey (System.Console)
write-host "Press any key to continue..."
[void][System.Console]::ReadKey($true)
- ข้อได้เปรียบ: ยอมรับคีย์ใด ๆ แต่ไม่รวมคีย์ตัวปรับแต่ง Shift, Alt, Ctrl อย่างเหมาะสม
- ข้อเสีย: ไม่ทำงานใน PS-ISE
<2> ReadKey (RawUI)
Write-Host "Press any key to continue ..."
$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
- ข้อเสีย: ไม่ทำงานใน PS-ISE
- ข้อเสีย: ไม่รวมคีย์ตัวปรับแต่ง
<3> ซม
cmd /c Pause | Out-Null
- ข้อเสีย: ไม่ทำงานใน PS-ISE
- ข้อเสีย: เปิดตัวเชลล์ / หน้าต่างใหม่อย่างเห็นได้ชัดเมื่อใช้งานครั้งแรก ไม่สังเกตเห็นได้ในการใช้งานครั้งต่อไป แต่ยังคงมีค่าใช้จ่าย
<4> อ่านโฮสต์
Read-Host -Prompt "Press Enter to continue"
- ข้อได้เปรียบ: ทำงานใน PS-ISE
- ข้อเสีย: ยอมรับเฉพาะคีย์ Enter
<5> คอมโพสิต ReadKey
นี่เป็นส่วนประกอบของ <1> ด้านบนพร้อมด้วยวิธีแก้ปัญหา ISE / kludge ที่ดึงมาจากข้อเสนอในบล็อกด้านเทคนิคของ Adam (ได้รับความอนุเคราะห์จาก Nick จากความคิดเห็นก่อนหน้านี้ในหน้านี้) ฉันได้ทำการปรับปรุงเล็กน้อยสองครั้งในช่วงหลัง: เพิ่ม Test-Path เพื่อหลีกเลี่ยงข้อผิดพลาดหากคุณใช้Set-StrictMode (คุณทำใช่ไหม!) และโฮสต์การเขียนขั้นสุดท้ายเพื่อเพิ่มบรรทัดใหม่หลังจากการกดแป้นพิมพ์ของคุณเพื่อวาง แจ้งในสถานที่ที่เหมาะสม
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
}
}
- ข้อได้เปรียบ: ยอมรับคีย์ใด ๆ แต่ไม่รวมคีย์ตัวปรับแต่ง Shift, Alt, Ctrl อย่างเหมาะสม
- ข้อได้เปรียบ: ทำงานใน PS-ISE (แม้ว่าจะใช้ Enter หรือคลิกเมาส์เท่านั้น)
- ข้อเสีย: ไม่ใช่ซับเดียว!