2011-08-22 21 views
46

görünüyor. Burada neyi yanlış yapıyorum? Başka bir komut dosyasından denirDiziyi başka bir komut dosyasına parametre olarak nasıl geçiririm? Ben scriptblock için parametre olarak dizeler dizisi geçemez gibi bir nedenle

Benim komut dosyası:

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

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

Ben

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

gibi başka bir komut dosyasından diyoruz dizideki sadece ilk öğe var - "111"

cevap

66

aşağıdaki gibi deneyin:

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

-ArgumentList argümanları/dizi alır. Yani, -arg $myarr verdiğinizde, dizinin öğelerini argümanlar olarak geçiriyorsunuz gibidir. Bu yüzden PowerShell'i bir dizi olan tek bir argüman olarak ele almak için zorlamak zorundasınız.

+0

evet, işe yarıyor. Bana nedenini açıklayabilir misin? :) anladığım kadarıyla, virgül() aslında iki alt diziye sahip bir dizidir, doğru mu? – mishkin

+7

@Mishkin - Açıklama, -ArgumentList'in bir argüman listesi/dizisi almasıdır. Yani -arg $ myarr' verdiğinizde, dizinin elemanlarını argümanlar olarak geçiriyorsunuz sanki. Bu yüzden powershell'i bir dizi olan tek bir argüman olarak ele almak için zorlamak zorundasınız. – manojlds

+0

Diziyi ve başka bir değişkeni nasıl geçirirsiniz? -arg (, $ myarr, $ singleValue). Örneğin, $ singleValue = "x" – eHaze

İlgili konular