2013-02-21 46 views
15

मेरे पास एक स्क्रिप्ट है जिसे मैं लिख रहा हूं जो एक एसओएपी सेवा से कनेक्शन बनाता है। कनेक्शन बनाने के बाद, मुझे भेजे गए प्रत्येक आदेश के साथ उपयोगकर्ता नाम/पास में पास होना होगा। समस्या मेरे पास है कि जब मैं पढ़ने के लिए मेजबान का उपयोग करते हैं, अपना पासवर्ड क्लियर में दिखाया गया है और खोल में रहता है:बाहरी सेवा के लिए पासवर्ड स्वीकार करने के लिए मैं पावरहेल के रीड-होस्ट फ़ंक्शन का उपयोग कैसे कर सकता हूं?

PS C:\Users\Egr> Read-Host "Enter Pass" 
Enter Pass: MyPassword 
MyPassword 

अगर मैं -AsSecureString साथ इसे छिपाने, मूल्य नहीं रह गया पारित किया जा सकता सेवा के लिए क्योंकि यह अब एक सिस्टम है। सुरक्षा। सुरक्षितता ऑब्जेक्ट:

PS C:\Users\gross> Read-Host "Enter Pass" -AsSecureString 
Enter Pass: ********** 
System.Security.SecureString 

जब मैं इसे पास करता हूं, तो यह काम नहीं करता है। मुझे क्लीयरक्स्ट में सेवा में पारित होने वाले पासवर्ड की परवाह नहीं है, मैं नहीं चाहता कि वे अपने पासवर्ड दर्ज करने के बाद उपयोगकर्ता के खोल पर चारों ओर चिपके रहें। क्या रीड-होस्ट इनपुट को छिपाना संभव है, लेकिन अभी भी पासवर्ड को cleartext के रूप में संग्रहीत किया गया है? यदि नहीं, तो क्या कोई तरीका है कि मैं System.Security.SecureString ऑब्जेक्ट को cleartext के रूप में पास कर सकता हूं?

धन्यवाद

उत्तर

30

$ पासवर्ड एक Securestring है, और इस सादे पाठ पासवर्ड वापस आ जाएगी।

[Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($Password)) 
+0

यही काम किया धन्यवाद की जाँच करें,! जिज्ञासा से, अगर मैं खुद को देख रहा था तो मुझे इस तरह का समाधान कहाँ मिलेगा? – EGr

+0

अच्छी तरह से कहा @Graimer। मुझे कुछ समय पहले इसी तरह के ऑपरेशन करने की ज़रूरत थी, इसलिए मैंने Google की खोज की और मुझे मेरा जवाब मिला। :-) –

0

आप एक चर के रूप में पासवर्ड (इनपुट) को सहेज सकते हैं और इसे अपनी सेवा में भेज सकते हैं। यदि कोड किसी स्क्रिप्ट या फ़ंक्शन के रूप में चलाया जाता है, तो पासवर्ड युक्त चर को हटाए जाने के बाद हटा दिया जाएगा (वे एक अस्थायी रूप से संग्रहीत हैं। स्थानीय दायरे)। यदि आप कंसोल में कमांड चलाते हैं (या . .\myscript.ps1 जैसे स्क्रिप्ट को डॉट-स्रोत), पासवर्ड वैरिएबल सत्र स्कोप में रहेगा, और जब तक आप इसे हटा नहीं देते हैं या सत्र बंद नहीं करेंगे तब तक उन्हें संग्रहीत किया जाएगा। यदि आप यह सुनिश्चित करना चाहते हैं कि आपकी स्क्रिप्ट चलाने के बाद चर हटा दिया गया है, तो आप इसे स्वयं हटा सकते हैं। इस तरह:

#Get password in cleartext and store in $password variable 
$password = Read-Host "Enter Pass" 

#run code that needs password stored in $password 

#Delete password 
Remove-Variable password 

कैसे चरों के दायरे में जमा हो जाती बारे में और अधिक पढ़ने के लिए, बाहर about_Scopes

+2

मुझे लगता है कि मैं 100% स्पष्ट नहीं था। मैं नहीं चाहता कि पासवर्ड खोल पर दिखाई दे, इसलिए यदि कोई चल रहा था तो वे पासवर्ड नहीं देख पाएंगे। – EGr