2013-07-10 40 views
5

我一直在試圖弄清楚這一點。我看過其他文章,並嘗試了一切,但我沒有得到任何地方。我想將一個數組作爲參數傳遞給另一個PS腳本。以下是我想要的:使用Invoke-Command將數組傳遞給另一個腳本

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

$ IPArray中的5個值不會傳遞給我調用的腳本。

在此先感謝,夥計們,我真的很感激任何幫助,您可以給...

+0

爲什麼在$ IPArray之前有逗號,爲什麼要把它放在圓括號中?如果你只想傳遞$ IPArray作爲參數列表,使用'-ArgumentList $ IPArray'。 –

+0

感謝您的快速回復,阿迪。根據[這個線程](http://stackoverflow.com/questions/7152740/how-to-pass-an-array-as-a-parameter-to-another-script),括號和逗號是必需的 - ArgumentList以數組的形式查看參數。然而,我嘗試了兩種方法,但都沒有成功。 – Sameer

+1

script.ps1是否有一個param()語句來接受參數?嘗試將以下內容放入$ server的test.ps1文件中進行測試: param([string [] $ IPs) $ IPS |寫輸出 這應該至少告訴你,如果你的參數被傳遞並被目標腳本正確接受。 – jbsmith

回答

11

用途:

... -ArgumentList (,$IPArray) 

因爲ArgumentList參數希望你正確地指出,你需要一個數組將數組包裝在另一個數組中。但是,此方案中的正確語法(指定參數值)是使用分組表達式()來創建嵌套數組。

+1

如果使用'@($ IPArray)',則不需要第一個逗號。 – ashes999

+2

'@()'對數組不做任何事情。也就是說,如果「@()」的內容是標量,那麼該標量將放入數組中,但如果內容已經是數組,則該數組不會包含在其他數組中。 –

+0

有趣的是,我不知道。謝謝。 – ashes999

0

這是一個古老的問題,但我要重新迭代@ keith-hill的答案 - 在數組聲明的開頭添加一個逗號(即使在包含現有數組時)。

這是愚蠢的,但我再次回答,因爲我嘗試了所有的替代方案,這是唯一可行的 - 即使使用PowerShell 3.0+。你可以使用#require來處理至少v3.0以上的任何東西,但是除非你做了@ keith-hill的建議 - 即使它是一個數組,而且參數是一個數組,但是在這種情況下PS很糟糕(而我愛PS)......做他所說的話(張貼沒有工作,那麼抱歉,但工作答案越好): \ ... -ArgumentList (,$IPArray)

這是沒有意義的,但工程。請放手給PS團隊投下炸彈,但如果我沒有這樣做,我的劇本將無效。而且我已經成爲「腳本人」......所以你走了。

+0

真的很想編輯它,但在所有誠實的情況下,您的修補程序無法正常工作...也許對您而言,但不適用於其他人。我很樂意聽到你的問題,但... – areyling

相關問題