2016-06-17 57 views
1

我已經得到了通過逗號分隔的列表接受一個參數多個值的PowerShell的功能,像這樣:通字符串變量函數的參數爲​​逗號分隔的列表

test-function -Targets 127.0.0.1, 8.8.8.8, fake.fqdn.com -FileName "c:\results.csv" 

這裏是帕拉姆部分:

function test-function { 
    param(
     [string[]]$Targets 
     [string]$FileName 
    ) 
} 

我試圖把儘可能多的目標參數數組,所以我把它們放進一個變量,像這樣:

foreach ($target in $arrayTargets) { $temp = $temp + ", $Target" } 
$Targets = $temp -replace "^, ", "" 

這會導致所需的「127.0.0.1,8.8.8.8,fake.fqdn.com」作爲變量$Targets中的字符串。

當我嘗試執行引用$Targets變量的函數時,該函數將$Targets解釋爲好像它是單個條目而不是多個。這是我用同樣的結果嘗試:

test-function -Targets $Targets -FileName "c:\results.csv" 
test-function -Targets "$Targets" -FileName "c:\results.csv" 

我也嘗試過的ArgList中幾種不同的方式:

$ArgList = "-Targets $Targets -FileName `"c:\results.csv`"" 
test-function $ArgList 

而不是採取每一個人數組項作爲參數,它需要整個字符串作爲參數。

我怎樣才能讓這個函數接受一個數組作爲多個目標?

+0

僅供參考您的函數調用和函數定義使用不同的參數名稱。這可能會讓有人試圖閱讀這裏發生的事情而感到困惑。 – Matt

回答

2

如果你有一個參數數組,應該沒有理由將它們打包到一個字符串中傳遞給你的函數。只需傳遞數組。

test-function -Targets $arrayTargets 

要給PowerShell中的變量分配一個值的數組,只需指定一個以逗號分隔的列表。注意要創建一個字符串數組,你應該確保把這些字符串放在引號中(單或雙)。以下所有內容均相同。

$arr = @("127.0.0.1", "8.8.8.8", "fake.fqdn.com") 
$arr = ('127.0.0.1', '8.8.8.8', 'fake.fqdn.com') 
$arr = "127.0.0.1", '8.8.8.8', "fake.fqdn.com" 

如果您需要數組轉換爲以任何理由以逗號分隔的字符串,就沒有必要用foreach循環來構建它。請使用-join運算符。

PS> $string = $arr -join ', ' 
PS> $string 
127.0.0.1, 8.8.8.8, fake.fqdn.com 

但是你可能只希望你的數組以這種形式顯示出來。如上所示,最好以數組形式傳遞給函數。您甚至可以使用-split運算符從字符串中取回數組。

PS> $string -split ', ' 
127.0.0.1 
8.8.8.8 
fake.fqdn.com 
+0

Yeup!這解決了我的問題。 –

相關問題