উত্তর:
Read-Host
কোনও ব্যবহারকারীর কাছ থেকে স্ট্রিং ইনপুট পাওয়ার জন্য একটি সহজ বিকল্প।
$name = Read-Host 'What is your username?'
পাসওয়ার্ডগুলি আড়াল করতে আপনি ব্যবহার করতে পারেন:
$pass = Read-Host 'What is your password?' -AsSecureString
পাসওয়ার্ডটিকে সরল পাঠ্যে রূপান্তর করতে:
[Runtime.InteropServices.Marshal]::PtrToStringAuto(
[Runtime.InteropServices.Marshal]::SecureStringToBSTR($pass))
টাইপ হিসাবে ফিরে $host.UI.Prompt()
, যদি আপনি @ খ্রিস্টানদের মন্তব্যে পোস্ট করা লিঙ্কে কোডটি চালান, আপনি এটির পাইপ দিয়ে রিটার্নের ধরণটি Get-Member
(উদাহরণস্বরূপ $results | gm
) খুঁজে পেতে পারেন। ফলাফল একটি অভিধান যেখানে কীটি FieldDescription
প্রম্পটে ব্যবহৃত কোনও বস্তুর নাম । লিঙ্ক উদাহরণে প্রথম প্রম্পট জন্য ফলাফলের অ্যাক্সেস করতে আপনার টাইপ করা হবে: $results['String Field']
।
কোনও পদ্ধতি না চালিয়ে তথ্য অ্যাক্সেস করতে, প্রথম বন্ধনী ছেড়ে দিন:
PS> $Host.UI.Prompt
MemberType : Method
OverloadDefinitions : {System.Collections.Generic.Dictionary[string,psobject] Pr
ompt(string caption, string message, System.Collections.Ob
jectModel.Collection[System.Management.Automation.Host.Fie
ldDescription] descriptions)}
TypeNameOfValue : System.Management.Automation.PSMethod
Value : System.Collections.Generic.Dictionary[string,psobject] Pro
mpt(string caption, string message, System.Collections.Obj
ectModel.Collection[System.Management.Automation.Host.Fiel
dDescription] descriptions)
Name : Prompt
IsInstance : True
$Host.UI.Prompt.OverloadDefinitions
আপনাকে পদ্ধতির সংজ্ঞা (গুলি) দেবে। প্রতিটি সংজ্ঞা হিসাবে প্রদর্শিত হয় <Return Type> <Method Name>(<Parameters>)
।
প্যারামিটার বাইন্ডিং ব্যবহার করা অবশ্যই এখানে যাওয়ার উপায়। এটি কেবল খুব দ্রুতই লেখা নয় (কেবল যুক্ত করুন[Parameter(Mandatory=$true)]
আপনার বাধ্যতামূলক পরামিতিগুলির উপরে ), তবে এটি কেবলমাত্র একমাত্র বিকল্প যা আপনি পরে নিজেকে ঘৃণা করবেন না।
আরও নীচে:
[Console]::ReadLine
পাওয়ারশেলের জন্য FxCop বিধি দ্বারা স্পষ্টভাবে নিষিদ্ধ । কেন? কারণ এটি কেবল পাওয়ারশেল.এক্সইতে কাজ করে, পাওয়ারশেল আইএসই , পাওয়ারজিইউআই ইত্যাদি নয়
পঠন-হোস্টটি বেশ সহজভাবে, খারাপ ফর্ম। রিড-হোস্ট অনিয়ন্ত্রিতভাবে স্ক্রিপ্টটি ব্যবহারকারীকে প্রম্পট করার জন্য থামায়, যার অর্থ আপনার আর কখনও স্ক্রিপ্ট থাকতে পারে না যার মধ্যে পঠন-হোস্ট ব্যবহার করে এমন স্ক্রিপ্ট থাকে।
আপনি পরামিতি জিজ্ঞাসা করার চেষ্টা করছেন।
[Parameter(Mandatory=$true)]
প্যারামিটারগুলির জন্য জিজ্ঞাসা করার জন্য আপনার বৈশিষ্ট্যটি এবং সঠিক টাইপিং ব্যবহার করা উচিত ।
আপনি যদি এটি এ ব্যবহার করেন তবে [SecureString]
এটি একটি পাসওয়ার্ড ক্ষেত্রের জন্য অনুরোধ করবে। আপনি যদি এটি কোনও শংসাপত্র প্রকারে ব্যবহার করেন ( [Management.Automation.PSCredential]
), শংসাপত্রগুলি ডায়ালগটি পপ আপ হবে, যদি প্যারামিটারটি না থাকে। একটি স্ট্রিং কেবল একটি সরল পুরাতন পাঠ্য বাক্সে পরিণত হবে। আপনি যদি প্যারামিটার অ্যাট্রিবিউটে (অর্থাত্) হেল্পমেসেজ যুক্ত করেন [Parameter(Mandatory = $true, HelpMessage = 'New User Credentials')]
তবে তা প্রম্পটের জন্য সহায়তা পাঠ্যে পরিণত হবে।
Read-Host
"খারাপ ফর্ম" হওয়ার জন্য এখানে প্রদত্ত কারণগুলি প্রয়োগ করা হয় না। তদুপরি, এর .ShouldProcess()
কিছু বিধিনিষেধ নেই যা Read-Host
যেমন কয়েকটি উত্তর সীমাবদ্ধ। তবে আমি সম্মত হই যে .ShouldProcess()
এটি প্রযোজ্য হলেই এটি আরও ভাল।
এটি আপনার স্ক্রিপ্টের শীর্ষে রাখুন। এটি স্ক্রিপ্টটির দ্বারা ব্যবহারকারীকে একটি পাসওয়ার্ডের অনুরোধ জানাবে। ফলস্বরূপ পাসওয়ার্ডটি in pw এর মাধ্যমে আপনার স্ক্রিপ্টের অন্য কোথাও ব্যবহার করা যেতে পারে ।
Param(
[Parameter(Mandatory=$true, Position=0, HelpMessage="Password?")]
[SecureString]$password
)
$pw = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($password))
আপনি যদি ডিবাগ করতে এবং সবেমাত্র পড়া পাসওয়ার্ডটির মান দেখতে চান তবে ব্যবহার করুন:
write-host $pw