আপনি কীভাবে পাওয়ারশেল ২.০ দিয়ে একটি 'বিরতি' করেন?


113

ঠিক আছে, আমি এটি হারাচ্ছি। পাওয়ারশেল আমাকে বিরক্ত করছে। আমি বিরতি ডায়ালগটি দেখতে চাই এবং তা হবে না।

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
পাওয়ারশেল আইএসইতেও আমার একই সমস্যা ছিল। যদিও স্ট্যান্ডার্ড পাওয়ারশেল কনসোলে দুর্দান্ত কাজ করে।
চার্লস অ্যান্ডারসন

3
আমি কেবল পাওয়ারশেলের সাথে জগাখিচুড়ি করছি এবং এটি এখনও জাহান্নাম হিসাবে বিরক্তিকর, এমনকি 2/2 বছর পরেও!
বিল কে

আপনি যদি অ্যাডামের টেক লিঙ্কটি বা @ মিশেল সোরেন্স উত্তরের কোডটি পড়েন (2020 সালে আমি এটি লিখতে যাচ্ছি প্রায় অর্ধেক পৃষ্ঠাতে) তবে আপনি আপনার বিরতিতে মোড়ানোর কোনও কৌশল আবিষ্কার করতে পারেন if (!$psise) { <# pause #> }। আপনি যদি আমার মতো হন এবং আপনার 99% কারণ বিরতি চান তবে আপনি পর্দাটি ঝলকানোর আগে পঠন করতে পারেন, তবে এটি সাহায্য করবে কারণ আপনি যদি আইএসই তে থাকেন তবে এটি ঝলকান না এবং আপনি ডন করবেন না 'বিরতি দরকার নেই
জন ভি কুম্পফ

উত্তর:


88
cmd /c pause | out-null

(এটি পাওয়ারশেল উপায় নয়, তবে এটি আরও মার্জিত))

গাছ বাঁচাও। ওয়ান-লাইনার ব্যবহার করুন।


7
/ c স্ট্রিং দ্বারা নির্দিষ্ট কমান্ড বহন করে এবং তারপরে সমাপ্ত | আউট-নাল আউটপুটটি আউট-নাল থেকে যায়, যেখানে আপনি এটি কখনই দেখতে পাবেন না আপনি যদি "চালিয়ে যেতে কোনও কী টিপুন ..." বার্তাটি দেখতে চান তবে পাইপটি সরিয়ে ফেলুন। এছাড়াও, পাওয়ারশেল আইএসইতে এটি কাজ করবে বলে মনে হচ্ছে না। প্রক্রিয়াটি কেবল আটকে যায় এবং আপনি কোনও কী টিপতে পারবেন না। কোন পথে?
ওয়াউটার


7
@ নিক হ্যাঁ, "সেমিডি / সি বিরতি | আউট-নাল" প্রতিস্থাপনের জন্য কোডের 47 টি লাইন, এটি পাওয়ারশেলের মতো শব্দ।
বিল কে

@ বিলক পোস্টটি আমি ওয়টারের প্রশ্নের উত্তরের সাথে সংযুক্ত করেছি। আপনি একমত না?
নিক

6
এটি আপনার উত্তরের মন্তব্য নয়, আমি মনে করি আপনি সম্পূর্ণ সঠিক। এটি পাওয়ারশেলের একটি মন্তব্য। আমি পরিমিতরূপে অসন্তুষ্ট - কোবলে প্রোগ্রাম করার পর থেকে আমি এতটা অর্থহীন অস্পষ্ট ভার্বোসটি দেখিনি।
বিল কে

234

আমি মনে করি স্পষ্টতার জন্য এখানে পছন্দগুলি পুনরায় সংশোধন / সংক্ষিপ্ত করা সার্থক ... তবে আমি একটি নতুন পরিবর্তনের প্রস্তাব দেব যা আমি বিশ্বাস করি যে সর্বোত্তম উপযোগিতা সরবরাহ করে।

<1> রিডকি (সিস্টেম.কনসোল)

write-host "Press any key to continue..."
[void][System.Console]::ReadKey($true)
  • সুবিধা: যে কোনও কী গ্রহণ করে তবে শিফট, আল্ট, সিটিআরএল সংশোধক কীগুলি যথাযথভাবে বাদ দেয়।
  • অসুবিধা: পিএস-আইএসই তে কাজ করে না।

<2> রিডকি (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> রিডকি সংমিশ্রণ

এটি অ্যাডাম টেক ব্লগের প্রস্তাব থেকে প্রাপ্ত আইএসই ওয়ার্কারআউন্ড / ক্লডজ (এই পৃষ্ঠায় আগের মন্তব্যে নিক এর সৌজন্যে) এর সাথে <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
    }
}
  • সুবিধা: যে কোনও কী গ্রহণ করে তবে শিফট, আল্ট, সিটিআরএল সংশোধক কীগুলি যথাযথভাবে বাদ দেয়।
  • সুবিধা: পিএস-আইএসইতে কাজ করে (যদিও কেবল এন্টার বা মাউস ক্লিক সহ)
  • অসুবিধা: ওয়ান-লাইনার নয়!

9
সেরা উত্তর, বিশেষত কারণ এটি এমন সমাধান সরবরাহ করে যা সর্বত্র কাজ করে
পেট্র

দুর্দান্ত উত্তর! আমি লক্ষ করতে চাই যে AllowCtrlCপছন্দ 2 পরামিতি যুক্ত করার ফলে ব্যবহারকারী স্ক্রিপ্টটি বন্ধ না করে Ctrl + C ক্লিক করতে পারবেন। তবুও, এই পছন্দটি এখনও সঠিকভাবে Ctrl পরিবর্তক কী বাদ দেয় না। (এটি কেবল ব্যবহারকারী হিসাবে কেবল Ctrl কীতে ক্লিক করলেই কাজ করে) তথ্যসূত্র: মাইক্রোসফ্ট টেকনেট - উইন্ডোজ পাওয়ারশেল টিপ: চালিয়ে যেতে কোনও কী টিপুন
ওজে এড্রি

2
বিকল্প 3 এবং 5 এর আরেকটি অসুবিধা রয়েছে: লিনাক্সে কাজ করে না
বিটবঙ্ক

43

আমি ধরে নিলাম আপনি কনসোল থেকে ইনপুট পড়তে চান। যদি তাই হয়, ব্যবহার করুন Read-Host


3
ডিট্টো - নীচের থেকে সম্ভবত প্রম্পট পাঠ্য যুক্ত করুন .. পড়ুন-হোস্ট-প্রম্পট "চালিয়ে যেতে এন্টার টিপুন"
জন এইচ

21

মত সমাধানগুলি cmd /c pauseএকটি নতুন কমান্ড দোভাষীকে পটভূমিতে শুরু এবং চালিত করার কারণ দেয়। যদিও কিছু ক্ষেত্রে গ্রহণযোগ্য, এটি সত্যই আদর্শ নয়।

সমাধানগুলি Read-Hostব্যবহারকারীকে চাপতে বাধ্য করে Enterএবং সত্যই "কোনও কী" নয়।

এই সমাধানটি আপনাকে সত্যিকারের "চালিয়ে যেতে কোনও কী টিপুন" ইন্টারফেস দেবে এবং একটি নতুন দোভাষী চালু করবে না, যা মূল pauseকমান্ডটি মূলত নকল করবে ।

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

প্রযুক্তিগতভাবে আইএসই সুযোগের বাইরে নেই কারণ আসল প্রশ্নটি কেবল পাওয়ারশেল ২.০ সম্পর্কে জিজ্ঞাসা করেছিল এবং আইএসই বাদ দিয়েছে। আপনি যদি আইএসই ব্যবহার করছেন তবে কেবল একটি ব্রেকপয়েন্ট ব্যবহার করুন।
রো ইয়ো মি মি

4
1. আমি সম্মত নই যে আইএসই সুযোগের বাইরে ছিল তবে এটি এখন অপ্রাসঙ্গিক। ২. আমি লক্ষ করছিলাম যে এই প্রশ্নটিতে যাত্রীদের দ্বারা সহায়তা করা ISE তে কাজ করে না।
বিল_সেটওয়ার্ট

2

মাইকেল সোরেন্সের উত্তর ছাড়াও :

<6> একটি নতুন প্রক্রিয়াতে রিডকি

Start-Process PowerShell {[void][System.Console]::ReadKey($true)} -Wait -NoNewWindow
  • সুবিধা: যে কোনও কী গ্রহণ করে তবে শিফট, আল্ট, সিটিআরএল সংশোধক কীগুলি যথাযথভাবে বাদ দেয়।
  • সুবিধা: পিএস-আইএসইতে কাজ করে।

এটি দুর্দান্ত কাজ করে, তবে -NoNewWindowযুক্ত না করা থাকলে পাওয়ারশেলের একটি নতুন উইন্ডো পপ আপ করে তোলে :)
jeuxjeux20

@ jeuxjeux20, পরামর্শের জন্য ধন্যবাদ, আমি এটি উত্তরে কমান্ডে যুক্ত করেছি।
আইআরন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.