2011-08-22 5 views
46

किसी कारण से, ऐसा लगता है कि मैं स्ट्रिंगब्लॉक पर पैरामीटर के रूप में तारों की सरणी पास नहीं कर सकता। मैं यहाँ क्या गलत कर रहा हूँ?किसी स्क्रिप्ट को पैरामीटर के रूप में सरणी कैसे पास करें?

मेरे स्क्रिप्ट जो एक और स्क्रिप्ट से कहा जाता है:

param(
    [parameter(Mandatory=$true)] 
    [string[]]$myarr 
) 

foreach ($elem in $myarr){ 
$elem 
} 

मैं के रूप में

[email protected]("111","222") 
start-job -filepath myscript.ps1 -arg $myarr 

एक और स्क्रिप्ट से इसे कहते सरणी में केवल पहला आइटम मिला - "111"

उत्तर

66

इसे नीचे की तरह आज़माएं:

start-job -filepath myscript.ps1 -arg (,$myarr) 

-ArgumentList तर्कों की एक सूची/सरणी लेता है। तो जब आप -arg $myarr देते हैं, तो ऐसा लगता है कि आप सरणी के तत्वों को तर्क के रूप में पास कर रहे हैं। तो आपको इसे एक तर्क के रूप में इलाज करने के लिए PowerShell को मजबूर करना होगा जो एक सरणी है।

+0

हाँ, यह काम करता है। क्या आप व्यख्या कर सकते हैं? :) जैसा कि मैं समझता हूं कि इसमें अल्पविराम() का अर्थ है कि यह वास्तव में दो उप सरणी के साथ एक सरणी है, है ना? – mishkin

+7

@ मिशकिन - स्पष्टीकरण यह होगा कि - आर्ग्यूमेंटलिस्ट एक सूची/तर्कों की सरणी में लेता है। तो जब आप '-र्ग $ myarr' देते हैं, तो ऐसा लगता है कि आप सरणी के तत्वों को तर्क के रूप में पास कर रहे हैं। तो आपको इसे एक तर्क के रूप में इलाज करने के लिए शक्तियों को मजबूर करना होगा जो एक सरणी है। – manojlds

+0

आप सरणी और अन्य चर कैसे पारित करेंगे? -र्ग (, $ myarr, $ एकल वैल्यू)। उदाहरण के लिए, $ singleValue = "x" – eHaze