जवाबों:
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
PowerShell के लिए FxCop नियमों द्वारा स्पष्ट रूप से मना किया गया है । क्यों? क्योंकि यह केवल PowerShell.exe में काम करता है, PowerShell ISE , PowerGUI , आदि में नहीं।
पढ़ें- मेजबान , काफी सरल, बुरा रूप है। Read-Host उपयोगकर्ता को संकेत देने के लिए स्क्रिप्ट को अनियंत्रित रूप से रोक देता है, जिसका अर्थ है कि आपके पास कभी भी कोई अन्य स्क्रिप्ट नहीं हो सकती है जिसमें Read-Host का उपयोग करने वाली स्क्रिप्ट शामिल है।
आप मापदंडों के लिए पूछने की कोशिश कर रहे हैं।
[Parameter(Mandatory=$true)]
मापदंडों के लिए आपको विशेषता का उपयोग करना चाहिए , और टाइपिंग को सही करना चाहिए ।
यदि आप इस पर उपयोग करते हैं [SecureString]
, तो यह एक पासवर्ड फ़ील्ड के लिए संकेत देगा। यदि आप इसका उपयोग क्रेडेंशियल प्रकार, ( [Management.Automation.PSCredential]
) पर करते हैं, तो क्रेडेंशियल संवाद पॉप अप होगा, यदि पैरामीटर नहीं है। एक स्ट्रिंग बस एक सादे पुराने पाठ बॉक्स बन जाएगा। यदि आप पैरामीटर विशेषता (वह है [Parameter(Mandatory = $true, HelpMessage = 'New User Credentials')]
) में एक हेल्पमेसेज़ जोड़ते हैं, तो यह प्रॉम्प्ट के लिए सहायता पाठ बन जाएगा।
Read-Host
"खराब फॉर्म" के लिए यहां दिए गए कारण लागू नहीं होते हैं। इसके अलावा, .ShouldProcess()
ऐसे प्रतिबंध हैं जो Read-Host
केवल कुछ उत्तरों तक सीमित नहीं हैं। हालांकि मैं मानता हूं कि .ShouldProcess()
यह बेहतर है, जब यह लागू हो।
इसे अपनी स्क्रिप्ट के शीर्ष पर रखें। यह स्क्रिप्ट को पासवर्ड के लिए उपयोगकर्ता को संकेत देने का कारण होगा। परिणामी पासवर्ड को $ pw के माध्यम से आपकी स्क्रिप्ट में कहीं और उपयोग किया जा सकता है ।
Param(
[Parameter(Mandatory=$true, Position=0, HelpMessage="Password?")]
[SecureString]$password
)
$pw = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($password))
यदि आप डिबग करना चाहते हैं और जिस पासवर्ड को आप पढ़ते हैं, उसका मूल्य देखें:
write-host $pw