जब PowerShell एक स्ट्रिंग के साथ शुरू होने वाली एक कमांड को देखता है तो यह केवल स्ट्रिंग का मूल्यांकन करता है, अर्थात, यह आम तौर पर इसे स्क्रीन पर इकोस करता है, उदाहरण के लिए:
PS> "Hello World"
Hello World
यदि आप PowerShell को कमांड नाम के रूप में स्ट्रिंग की व्याख्या करना चाहते हैं तो कॉल ऑपरेटर (&) का उपयोग करें:
PS> & 'C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe'
उसके बाद आपको संभवतः पैरामीटर / तर्क जोड़े को उद्धृत करने की आवश्यकता होती है जिसमें रिक्त स्थान और / या उद्धरण वर्ण होते हैं। जब आप इस तरह के जटिल कमांड लाइन तर्कों के साथ एक EXE फ़ाइल लेते हैं, तो यह आमतौर पर एक उपकरण के लिए बहुत सहायक होता है जो आपको दिखाएगा कि कैसे PowerShell तर्क को EXE फ़ाइल में भेजता है। PowerShell समुदाय एक्सटेंशन इस तरह के एक उपकरण है। इसे प्रतिध्वनि कहते हैं। आप बस EXE फ़ाइल को प्रतिध्वनि के साथ प्रतिस्थापित करते हैं - सभी तर्कों को जगह में छोड़ते हुए, और यह आपको दिखाएगा कि EXE फ़ाइल को कैसे तर्क मिलेगा, उदाहरण के लिए:
PS> echoargs -verb:sync -source:dbfullsql="Data Source=mysource;Integrated Security=false;User ID=sa;Pwd=sapass!;Database=mydb;" -dest:dbfullsql="Data Source=.\mydestsource;Integrated Security=false;User ID=sa;Pwd=sapass!;Database=mydb;",computername=10.10.10.10,username=administrator,password=adminpass
Arg 0 is <-verb:sync>
Arg 1 is <-source:dbfullsql=Data>
Arg 2 is <Source=mysource;Integrated>
Arg 3 is <Security=false;User>
Arg 4 is <ID=sa;Pwd=sapass!;Database=mydb;>
Arg 5 is <-dest:dbfullsql=Data>
Arg 6 is <Source=.\mydestsource;Integrated>
Arg 7 is <Security=false;User>
Arg 8 is <ID=sa;Pwd=sapass!;Database=mydb; computername=10.10.10.10 username=administrator password=adminpass>
उदाहरण के लिए, जब तक आप इसे सही तरीके से प्राप्त नहीं कर लेते, तब तक आप इकोगारिक्स का उपयोग कर सकते हैं:
PS> echoargs -verb:sync "-source:dbfullsql=Data Source=mysource;Integrated Security=false;User ID=sa;Pwd=sapass!;Database=mydb;"
Arg 0 is <-verb:sync>
Arg 1 is <-source:dbfullsql=Data Source=mysource;Integrated Security=false;User ID=sa;Pwd=sapass!;Database=mydb;>
यह पता चला है कि मैं कनेक्शन स्ट्रिंग के आसपास दोहरे उद्धरण चिह्नों को बनाए रखने से पहले बहुत कोशिश कर रहा था। जाहिरा तौर पर यह आवश्यक नहीं है क्योंकि यहां तक कि cmd.exe भी उन्हें बाहर निकाल देगा।
BTW, PowerShell टीम से नफरत करता है। वे मुझे वांछित परिणाम प्राप्त करने के लिए एकल और दोहरे उद्धरणों के विशिष्ट झुकाव को दिखाने में काफी मददगार थे - यदि आपको आंतरिक दोहरे उद्धरणों को रखने की आवश्यकता है। :-) उन्होंने यह भी महसूस किया कि यह दर्द का एक क्षेत्र है, लेकिन वे किसी विशेष मुद्दे से प्रभावित लोगों की संख्या से प्रेरित हैं। यदि यह आपके लिए दर्द का क्षेत्र है, तो कृपया इस PowerShell बग सबमिशन को वोट करें ।
PowerShell पार्स कैसे करें, इस बारे में अधिक जानकारी के लिए, मेरी प्रभावी PowerShell ब्लॉग श्रृंखला देखें - विशेष रूप से आइटम 10 - "PowerShell पार्सिंग मोड्स को समझना"
अद्यतन 4/4/2012: इस स्थिति को PowerShell V3 में संभालना बहुत आसान हो गया है। विवरण के लिए इस ब्लॉग पोस्ट को देखें ।