2013-07-10 26 views
5

utknąłem próbuje dowiedzieć się tego. Widziałem inne artykuły i próbowałem wszystkiego, ale nigdzie się nie dostaję. Próbuję przekazać tablicę jako argument do innego skryptu PS. Oto, co próbuję:Mijając tablicę do innego skryptu z Invoke-Command

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

5 wartości w $ IPArray nie są przekazywane do skryptu, który nazywam.

góry dzięki, chłopaki, naprawdę wdzięczni za każdą pomoc można dać ...

+0

Dlaczego masz przecinek przed $ IPArray i dlaczego umieszczenie go w nawiasach? Jeśli chcesz tylko podać $ IPArray jako listę argumentów, użyj '-ArgumentList $ IPArray'. –

+0

Dzięki za szybką odpowiedź, Adi. Według [tego wątku] (http://stackoverflow.com/questions/7152740/how-to-pass-an-array-asa-a-parametr-to-another-script), wymagane są nawiasy i przecinki - ArgumentList, aby wyświetlić argument jako tablicę. Próbowałem jednak w obie strony i nie działałem. – Sameer

+1

Czy skrypt.ps1 ma instrukcję param(), aby zaakceptować argument (y)? Przetestuj to poprzez wprowadzenie następujących w pliku test.ps1 $ na serwerze: param ([string [] IP $) $ IPS | Write-Output To powinno przynajmniej powiedzieć, jeśli argument jest uzyskiwanie przekazywane i przyjęte odpowiednio przez skrypt docelowej. – jbsmith

Odpowiedz

11

Zastosowanie:

... -ArgumentList (,$IPArray) 

Ponieważ parametr ArgumentList spodziewa tablicę pan słusznie zauważył, że trzeba zawiń tablicę w inną tablicę. Jednak poprawna składnia w tym scenariuszu (określając wartość parametru) polega na użyciu wyrażenia grupującego () w celu utworzenia macierzy zagnieżdżonej.

+1

Pierwszy przecinek nie jest konieczny, jeśli używasz '@ ($ IPArray)'. – ashes999

+2

'@()' nic nie robi z tablicy.Oznacza to, że jeśli zawartość '@()' jest skalarem, to skalar jest wstawiany do tablicy, ale jeśli zawartość jest już tablicą, ta tablica nie jest opakowana w dodatkową tablicę. –

+0

Ciekawe, nie wiedziałem o tym. Dzięki. – ashes999

0

To jest stare pytanie, ale zamierzam powtórzyć @ keith-hill w odpowiedzi - dodać przecinek na początku deklaracji tablicy (nawet przy uwzględnieniu istniejącej tablicy).

To głupie, ale ja odpowiadając ponownie, ponieważ próbowałem wszystkie alternatywy i to jest jedyna rzecz, która działa - nawet z PowerShell 3.0+. Można użyć #require niczego od co najmniej v3.0 +, ale nic nie będzie działać, chyba że robisz to, co @ keith skoczni sugeruje - mimo że jest tablicą, a parametr jest tablicą, PS bani w tym przypadku (i ja kocham PS) ... to, co powiedział (wpis nie działa, więc przepraszam, ale odpowiedzi robocze są lepsze): \ ... -ArgumentList (,$IPArray)

to nie ma sensu, ale to działa. Wręczam zespołowi PS za zrzucenie bomby na to, ale gdybym tego nie zrobił, mój skrypt byłby nieważny. I stałem się "skrypciarzem" ... więc proszę.

+0

NAPRAWDĘ chciałem to edytować, ale szczerze mówiąc twoja poprawka nie działa ... może dla ciebie, ale nie dla wszystkich innych. Chciałbym jednak usłyszeć o Twoim problemie ... – areyling