Nic*_*nan 2 powershell parameter-passing
我有一个 PowerShell 函数,它通过逗号分隔的列表接受单个参数的多个值,如下所示:
test-function -Targets 127.0.0.1, 8.8.8.8, fake.fqdn.com -FileName "c:\results.csv"
Run Code Online (Sandbox Code Playgroud)
这是参数部分:
function test-function {
param(
[string[]]$Targets
[string]$FileName
)
}
Run Code Online (Sandbox Code Playgroud)
我试图将一个数组作为多个 Target 参数放入,因此我将它们放入一个变量中,如下所示:
foreach ($target in $arrayTargets) { $temp = $temp + ", $Target" }
$Targets = $temp -replace "^, ", ""
Run Code Online (Sandbox Code Playgroud)
这将导致所需的“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"
Run Code Online (Sandbox Code Playgroud)
我还尝试了 ArgList 几种不同的方式:
$ArgList = "-Targets $Targets -FileName `"c:\results.csv`""
test-function $ArgList
Run Code Online (Sandbox Code Playgroud)
它不是将每个单独的数组条目作为参数,而是将整个字符串作为参数。
我怎样才能让这个函数接受一个数组作为多个目标?
如果您有一个参数数组,则没有理由将它们打包到字符串中以传递给您的函数。只需传递数组即可。
test-function -Targets $arrayTargets
Run Code Online (Sandbox Code Playgroud)
要将值数组分配给 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"
Run Code Online (Sandbox Code Playgroud)
如果您出于任何原因需要将数组转换为逗号分隔的字符串,则无需使用循环来构建它foreach。而是使用-join运算符。
PS> $string = $arr -join ', '
PS> $string
127.0.0.1, 8.8.8.8, fake.fqdn.com
Run Code Online (Sandbox Code Playgroud)
但您可能只希望这种形式的数组显示它。如上所示,最好将其保留为数组形式以传递给函数。您甚至可以使用运算符从字符串中获取数组-split。
PS> $string -split ', '
127.0.0.1
8.8.8.8
fake.fqdn.com
Run Code Online (Sandbox Code Playgroud)