【问题标题】:Pass String Variable to Function Argument as Comma Separated List将字符串变量作为逗号分隔列表传递给函数参数
【发布时间】:2016-10-19 17:53:13
【问题描述】:

我有一个 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

它不是将每个单独的数组条目作为参数,而是将整个字符串作为参数。

如何让这个函数接受一个数组作为多个目标?

【问题讨论】:

  • 仅供参考,您的函数调用和函数定义使用不同的参数名称。这可能会让试图阅读这里发生的事情的人感到困惑。

标签: powershell parameter-passing


【解决方案1】:

如果您有一个参数数组,则没有理由将它们打包成一个字符串传递给您的函数。只需传递数组即可。

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

【讨论】:

  • 是的!这解决了我的问题。
猜你喜欢
  • 1970-01-01
  • 2014-10-12
  • 1970-01-01
  • 1970-01-01
  • 2019-08-29
  • 2014-02-01
  • 1970-01-01
  • 2016-12-22
  • 2019-08-19
相关资源
最近更新 更多