2013-07-10 15 views
5

Bunu anlamaya çalışıyorum. Diğer makaleleri gördüm ve her şeyi denedim, ama hiçbir yere gitmiyorum. Ben başka bir PS komut dosyasına bir argüman olarak bir dizi geçirmeye çalışıyorum. $ IPArray içindeDiziyi Invoke-Command ile başka bir betiğe geçirme

$IPArray = Get-Content C:\ListofIps.txt 
Invoke-Command -Computername $server -Credential $cred -FilePath "C:\script.ps1" -ArgumentList (,$IPArray) 

5 değerleri ararım komut dosyasına geçirilen değildir: İşte çalıştığım şey. peşin

Sağolun çocuklar, gerçekten verebilirim herhangi bir yardım ... takdir

+0

$ IPArray'dan önce neden bir virgülünüz var ve neden onu parantez içine alıyorsunuz? Bağımsız değişken listesi olarak $ IPArray iletmek istiyorsanız, '-ArgumentList $ IPArray' kullanın. –

+0

Hızlı yanıt için teşekkürler, Adi. Bu konuya göre (http://stackoverflow.com/questions/7152740/how-to-pass-an-array-as-a-parameter-to-another-script), parantez ve virgül için gereklidir - ArgumentList argümanı bir dizi olarak görüntülemek için. Ancak her ikisini de denedim, ve işe yaramadı. – Sameer

+1

script.ps1 argümanını kabul etmek için bir param() ifadesi var mı? Bunu, $ server üzerindeki bir test.ps1 dosyasına koyarak test etmeyi deneyin: param ([string [] $ IPs) $ IPS | Yazma-Çıktı Bu, en azından argümanın geçip hedef komut dosyası tarafından düzgün bir şekilde kabul edilip edilmediğini söylemelidir. – jbsmith

cevap

11

Kullanım: ArgumentList parametre doğru yapmanız gerekir ettiği belirlendi dizi bekleyen

... -ArgumentList (,$IPArray) 

Çünkü diziyi başka bir dizide sarın. Ancak, bu senaryodaki doğru sözdizimi (bir parametre değeri belirterek), iç içe dizi oluşturmak için bir gruplandırma ifadesi () kullanmaktır.

+1

'@ ($ IPArray)' komutunu kullanırsanız ilk virgül gerekli değildir. – ashes999

+2

'@()' bir diziye hiçbir şey yapmaz.Yani, @() 'nin içeriği bir skaler ise, o zaman skaler diziye konur, ancak içerik zaten bir dizi ise, bu dizi ek bir diziye sarılmaz. –

+0

İlginç, bunu bilmiyordum. Teşekkürler. – ashes999

0

Bu eski bir sorudur, ancak cevap üzerinde @ keith-hill'i yeniden yineleyeceğim - dizi bildiriminin başlangıcında bir virgül ekleyin (varolan bir dizi dahil olsa bile).

Bu aptalca, ama yine de cevap veriyorum çünkü tüm alternatifleri denedim ve bu tek şey çalışıyor - PowerShell 3.0+ ile bile. #require'u en az v3.0 + 'dan herhangi bir şey için kullanabilirsiniz, ancak @ keith-hill'in önerdiği şeyi yapmadığınız sürece hiçbir şey çalışmaz - bir dizi olsa bile ve parametre bir dizidir, PS bu durumda (ve bende) ... -ArgumentList (,$IPArray)

hiç mantıklı \, ama bu işleri:) PS seviyorum ... o (gönderme çalışma cevaplar iyidir çok üzgünüm ama işe yaramadı) söylediklerini yapmak. PS ekibine bomba atmak için eller aşağı iniyor, ama eğer yapmamış olsaydım, senaryom geçersiz ve hükümsüz olurdu. Ve ben "senaryo yazarı" oldum ... işte gidiyorsun.

+0

GERÇEKTEN bunu düzeltmek istedi, ancak bütün dürüstlükte düzeltmeniz işe yaramıyor ... belki sizin için ama herkes için değil. Sorunu duymak isterim ama ... – areyling