आप PowerShell 2.0 के साथ एक 'पॉज़' कैसे करते हैं?


113

ठीक है, मैं इसे खो रहा हूं। PowerShell मुझे परेशान कर रहा है। मैं प्रकट होने के लिए विराम संवाद चाहूँगा, और यह नहीं होगा।

PS W:\>>> $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
Exception calling "ReadKey" with "1" argument(s): "The method or operation is not implemented."
At line:1 char:23
+ $host.UI.RawUI.ReadKey <<<< ("NoEcho")
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : DotNetMethodException

1
मुझे PowerShell ISE में यही समस्या थी। हालांकि मानक PowerShell कंसोल में ठीक काम करता है।
चार्ल्स एंडरसन

3
मैं सिर्फ शक्तियां के साथ खिलवाड़ कर रहा हूं और यह अभी भी नरक के रूप में परेशान है, यहां तक ​​कि 2 1/2 साल बाद भी!
बिल के

यदि आप एडम के टेक लिंक या @Michael Sorens उत्तर में कोड को पढ़ते हैं (पृष्ठ को लगभग आधा कर देते हैं जैसा कि मैंने इसे 2020 में लिखा है) तो आप अपने ठहराव को लपेटने की एक तकनीक की खोज कर सकते हैं if (!$psise) { <# pause #> }। यदि आप मेरे जैसे हैं और आप जिस कारण को रोकना चाहते हैं उसका 99% हिस्सा ऐसा है जिससे आप स्क्रीन को ब्लिंक करने से पहले पढ़ सकते हैं, तो इससे मदद मिलेगी, क्योंकि यदि आप आईएसई में हैं तो यह पलक नहीं झपकती है और आप डॉन 't
पोज़ की

जवाबों:


88
cmd /c pause | out-null

(यह PowerShell तरीका नहीं है, लेकिन यह बहुत अधिक सुरुचिपूर्ण है।)

जंगलों को बचाएं। वन-लाइनर्स का उपयोग करें।


7
/ c स्ट्रिंग द्वारा निर्दिष्ट कमांड को बाहर करता है और फिर समाप्त करता है | आउट-नल पाइप आउट-नल को आउटपुट देता है, जहां आप इसे कभी नहीं देख पाएंगे। यदि आप "जारी रखने के लिए कोई कुंजी दबाएं ..." संदेश देखना चाहते हैं, तो पाइप को हटा दें। इसके अलावा, यह PowerShell ISE में काम नहीं करता है। प्रक्रिया बस अटक जाती है, और आप किसी भी कुंजी को दबा नहीं सकते हैं। उसके आसपास कोई रास्ता?
राउटर

1
@ राउटर इस ब्लॉग पोस्ट को देखें: कैसे एक PowerShell स्क्रिप्ट को ठीक से रोकें
निक

7
@ हां, "cmd / c pause | out-null" को बदलने के लिए कोड की 47 पंक्तियाँ, जो Powerhellhell तरह से ध्वनि करता है।
बिल के

@BillK पोस्ट मैं राउटर के प्रश्न के उत्तर से जुड़ा था। क्या आप असहमत हैं?
निक

6
यह आपके उत्तर पर कोई टिप्पणी नहीं थी, मुझे लगता है कि आप पूरी तरह से सही हैं। यह PowerShell पर एक टिप्पणी है। जब से मैंने कोबोल में प्रोग्राम किया है, तब से मैं मामूली रूप से निराश हूं - मैंने इसे बहुत ज्यादा अस्पष्ट नहीं देखा है।
बिल के

234

मुझे लगता है कि स्पष्टता के लिए यहां विकल्पों को फिर से प्रस्तुत करना / संक्षेप में प्रस्तुत करना सार्थक है ... फिर एक नई भिन्नता प्रदान करता हूं जो मेरा मानना ​​है कि सबसे अच्छी उपयोगिता प्रदान करता है।

<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 संशोधक कुंजियों को ठीक से शामिल नहीं करता है।
  • लाभ: पीएस-आईएसई में काम करता है (हालांकि केवल दर्ज करें या माउस क्लिक के साथ)
  • नुकसान: एक-लाइनर नहीं!

9
सर्वश्रेष्ठ उत्तर, विशेष रूप से क्योंकि यह हर जगह काम करने वाले समाधान प्रदान करता है
पेट्र

बहुत बढ़िया जवाब! मैं ध्यान देना चाहूंगा कि AllowCtrlC2 को चुनने के लिए पैरामीटर को जोड़ने से उपयोगकर्ता स्क्रिप्ट को समाप्त किए बिना Ctrl + C पर क्लिक कर सकता है। फिर भी, यह विकल्प अभी भी ठीक से Ctrl संशोधक कुंजी को बाहर नहीं करता है। (यह वैसा ही काम करता है जैसे कि उपयोगकर्ता केवल Ctrl कुंजी पर क्लिक करता है) संदर्भ: Microsoft TechNet - Windows PowerShell टिप: जारी रखने के लिए कोई भी कुंजी दबाएँ
Oz Edri

2
विकल्प 3 और 5 का एक और नुकसान है:
bitbonk

43

मुझे लगता है कि आप कंसोल से इनपुट पढ़ना चाहते हैं। यदि हां, तो उपयोग करें Read-Host


3
Ditto - हो सकता है कि नीचे से प्रांप्ट किए गए टेक्स्ट को जोड़ दें .. पढ़ें-होस्ट -Prompt "जारी रखने के लिए Enter दबाएं"
जॉन एच

21

जैसे समाधान cmd /c pauseपृष्ठभूमि में शुरू करने और चलाने के लिए नए कमांड दुभाषिया के कारण । हालांकि कुछ मामलों में स्वीकार्य है, यह वास्तव में आदर्श नहीं है।

का उपयोग कर समाधान Read-Host करने वाले उपयोगकर्ता को दबाने के लिए मजबूर करते हैंEnter हैं और वास्तव में "कोई भी कुंजी" नहीं है।

यह समाधान आपको इंटरफ़ेस जारी रखने के लिए एक सच्ची "किसी भी कुंजी को दबाएगा" और एक नया दुभाषिया शुरू नहीं करेगा, जो मूल pauseकमांड की अनिवार्य रूप से नकल करेगा ।

Write-Host "Press any key to continue..."
[void][System.Console]::ReadKey($true)

तकनीकी रूप से ISE के दायरे से बाहर है क्योंकि मूल प्रश्न केवल Powershell 2.0 के बारे में पूछा गया था और ISE को बाहर रखा गया था। यदि आप आईएसई का उपयोग कर रहे हैं, तो बस एक ब्रेकपॉइंट का उपयोग करें।
Ro Yo Mi

4
1. मैं इस बात से सहमत नहीं हूं कि आईएसई दायरे से बाहर था, लेकिन यह अब अप्रासंगिक है। 2. मैं इस सवाल पर राहगीरों की सहायता करने के लिए ISE में काम नहीं कर रहा था।
Bill_Stewart

2

माइकल सोरेंस के जवाब के अलावा :

<6> एक नई प्रक्रिया में ReadKey

Start-Process PowerShell {[void][System.Console]::ReadKey($true)} -Wait -NoNewWindow
  • लाभ: किसी भी कुंजी को स्वीकार करता है, लेकिन Shift, Alt, Ctrl संशोधक कुंजियों को ठीक से शामिल नहीं करता है।
  • फायदा: पीएस-आईएसई में काम करता है।

यह बहुत अच्छा काम करता है, लेकिन जब तक -NoNewWindowइसे जोड़ा नहीं जाता है , तब तक
पॉवरशेल की

@ jeuxjeux20, सुझाव के लिए धन्यवाद, मैंने जवाब में इसे कमांड में जोड़ा है।
लोहा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.