मुझे लगता है कि स्पष्टता के लिए यहां विकल्पों को फिर से प्रस्तुत करना / संक्षेप में प्रस्तुत करना सार्थक है ... फिर एक नई भिन्नता प्रदान करता हूं जो मेरा मानना है कि सबसे अच्छी उपयोगिता प्रदान करता है।
<1> ReadKey (System.Console)
write-host "Press any key to continue..."
[void][System.Console]::ReadKey($true)
- लाभ: किसी भी कुंजी को स्वीकार करता है, लेकिन Shift, Alt, Ctrl संशोधक कुंजियों को ठीक से शामिल नहीं करता है।
- नुकसान: पीएस-आईएसई में काम नहीं करता है।
<2> ReadKey (RawUI)
Write-Host "Press any key to continue ..."
$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
- नुकसान: पीएस-आईएसई में काम नहीं करता है।
- नुकसान: संशोधक कुंजियों को बाहर नहीं करता है।
<3> सेमी
cmd /c Pause | Out-Null
- नुकसान: पीएस-आईएसई में काम नहीं करता है।
- नुकसान: पहली बार उपयोग किए जाने पर नए शेल / विंडो को दिखाई देता है; बाद के उपयोग पर ध्यान देने योग्य नहीं है लेकिन अभी भी ओवरहेड है
<4> पढ़ें-होस्ट
Read-Host -Prompt "Press Enter to continue"
- फायदा: पीएस-आईएसई में काम करता है।
- नुकसान: केवल स्वीकार कुंजी दर्ज करें।
<5> ReadKey समग्र
यह आदम के टेक ब्लॉग (इस पृष्ठ पर पहले की टिप्पणियों से निक के सौजन्य से) पर प्रस्ताव से निकाले गए आईएसई वर्कअराउंड / कीचड़ के साथ ऊपर <1> का एक संयुक्त है । मैंने बाद के लिए दो मामूली सुधार किए: यदि आप सेट-स्ट्रिक्टमोड (आप करते हैं, तो आप नहीं करते?) का उपयोग करने के लिए टेस्ट-पाथ को जोड़ते हैं और सबसे डालने के लिए अपने कीस्ट्रोके के बाद एक नई पंक्ति जोड़ने के लिए अंतिम लिखो-होस्ट। सही जगह पर शीघ्र।
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 संशोधक कुंजियों को ठीक से शामिल नहीं करता है।
- लाभ: पीएस-आईएसई में काम करता है (हालांकि केवल दर्ज करें या माउस क्लिक के साथ)
- नुकसान: एक-लाइनर नहीं!