2011-05-10 14 views
9

मैं एक चर का उपयोग कमांड के पैरामीटर के रूप में करने की कोशिश कर रहा हूं लेकिन इसे काफी समझ नहीं सकता। मान लें कि MyCommand दो पैरामीटर स्वीकार करेगा: option1 और option2 और वे बूलियन मान स्वीकार करते हैं। विकल्प 1 या 2 विकल्प के लिए मैं $ newVar का उपयोग कैसे करूं?PowerShell चर का उपयोग कमांड पैरामीटर के रूप में कैसे करें?

$newVar = "option1" 
MyCommand -$newVar:$true 

मैं की तर्ज पर कुछ बार आ रही है 'एक स्थितीय पैरामीटर नहीं पाया जा सकता है कि तर्क को स्वीकार करता है' OPTION1 -System.String ': उदाहरण के लिए।


अधिक विशेष रूप से:
यहाँ, CSV फ़ाइल एक अलग नीति का एक उत्पादन है। लूप फ़ाइल में प्रत्येक प्रॉपर्टी के माध्यम से जाता है और मेरी पॉलिसी asdf में उस मान को सेट करता है; इसलिए -$_.name:$_.value को -AllowBluetooth:true के रूप में प्रतिस्थापित किया जाना चाहिए।

Import-Csv $file | foreach-object { 
    $_.psobject.properties | where-object { 
    # for testing I'm limiting this to 'AllowBluetooth' option 
    if($_.name -eq "AllowBluetooth"){ 
    Set-ActiveSyncMailboxPolicy -Identity "asdf" -$_.name:$_.value 
    }} 
} 
+0

आप 'newVar' लेकिन गलत तरीके से' myVar' में डाल मतलब के साथ: समाधान आह्वान-अभिव्यक्ति का उपयोग है? – manojlds

+0

यह सही है, धन्यवाद। – Gary

उत्तर

19

आमतौर cmdlet पैरामीटर भरे जा सकते करने के लिए एक चर का उपयोग करने के लिए, आप एक हैश तालिका चर का उपयोग करना चाहते हैं, और splat यह, का उपयोग करते हुए @

$newVar = @{option1 = $true} 
mycommand @newVar 

जोड़ा गया उदाहरण:

$AS_policy1 = @{ 
Identity = "asdf" 
AllowBluetooth = $true 
} 

Set-ActiveSyncMailboxPolicy @AS_policy1 
+0

मदद के लिए धन्यवाद, लेकिन यह एक त्रुटि देता है "एक स्थितित्मक पैरामीटर नहीं मिला है जो तर्क 'सिस्टम। चयन। हैशटेबल' स्वीकार करता है। विशेष रूप से मेरे पास एक सीएसवी से गुण गुण प्राप्त करने के लिए एक लूप है और उन्हें सेट-एक्टिव सिंक मेलबॉक्स नीति में चलाएं। एक विशिष्ट उदाहरण मैं $ _। name = "AllowBluetooth" और $ _। value = $ true कहूंगा (मैंने सही मानों की पुष्टि करने के लिए इन चरों को लिखा है। हालांकि, मैं इसे सभी को एक साथ नहीं रख सकता 'Set-ActiveSyncMailboxPolicy - पहचान "asdf" @ {$ _। नाम = $ _। मूल्य} 'या' - $ _। नाम: $ _। मूल्य'। यह $ _ लेता है। हालांकि मूल्य ठीक है। – Gary

+0

संपादित देखें। यदि आप पैरामीटर को विभाजित करते हैं , आप सभी को हैशटेबल में शामिल करना चाहिए। – mjolinor

2

देखने के लिए कि यह आपके लिए काम करता है:

iex "MyCommand -$($newVar):$true" 
+0

धन्यवाद manojlds, यह मुझे थोड़ा करीब मिला। सचमुच, $ newVar $ _ है। नाम और $ true $ _ मूल्य है (जो "अनुमति दें" के बराबर है)। जिस तरह से मैं इसे कर रहा था, उसने मूल्य के लिए $ _ मूल्य स्वीकार किया लेकिन पैरामीटर के रूप में $ _ नाम नहीं। आपकी विधि का उपयोग करना मेरे पैरामीटर के रूप में $ _। नाम स्वीकार करता है लेकिन मूल्य के रूप में $ _। मूल्य नहीं है ... कह रहा है कि "system.String" मान को टाइप करने के लिए [type] टाइप नहीं किया जा सकता है। हालांकि मैं अन्य चीजों की कोशिश करता रहूंगा। – Gary

+0

मुझे आपकी विधि को काम करने के लिए मिला - $ ($ newVar) एक स्ट्रिंग चाहता है, लेकिन यह बूलियन मानों पर विफल रहता है क्योंकि ऐसा लगता है कि यह एक स्ट्रिंग है। मेरा मानना ​​है कि ऐसा इसलिए है क्योंकि पूरा आदेश उद्धरण में है। कोई संकेतक? – Gary

+0

@ फ़ैंटबुलम: 'आईईएक्स" माईकॉमैंड - $ ($ _। नाम): $ ($ _। मूल्य) "फिर मुझे काम करना चाहिए, क्योंकि मैंने अपने उत्तर में समझाया है। +1 @manojlds। –

1

मैं के साथ की कोशिश करेंगे:

 
$mycmd = "MyCommand -$($newVar):$true" 
& $mycmd 

परिणाम

क्योंकि एम्परसेंड ऑपरेटर काम नहीं कर सकता बस बिना किसी पैरामीटर के एकल आदेश निष्पादित करें, या स्क्रिप्ट ब्लॉक

+0

सुझाव empo के लिए धन्यवाद, लेकिन ऐसा लगता है कि यह मेरे मूल के समान व्यवहार करता है। अगर मैं मदद करता हूं तो मैं अपनी वास्तविक लिपि का एक अंश पोस्ट कर सकता हूं, लेकिन इसमें कई लूप और एक्सचेंज कमांड शामिल हैं, इसलिए मुझे लगता है कि यह सिर्फ भ्रम पैदा करेगा। – Gary

+0

@ फ़ैंटबुलम: मुझे लगता है कि @manojlds जाने का सही तरीका है। –

0

मैं एक ही था समस्या और बस यह पता चला कि इसे कैसे हल किया जाए। आह्वान-अभिव्यक्ति $ mycmd यह $ mycmd-स्ट्रिंग का उपयोग करता है, चर बदल देता है और cmdlet के रूप में यह कार्यान्वित दिए गए मापदंडों

संबंधित मुद्दे