我在Powershell中有一个功能,想要在许多服务器上运行它。
它通过Powershell步骤从Jenkins运行,输入参数$env:servers
被配置为“多行字符串”。
简单的例子:
function test {
param(
[string]$servername
)
#do somthing
}
$servers = $env:servers
foreach ($s in $servers) {
test -servername $s
}
但是当我使用参数构建它时,foreach
不起作用-它像对待单个字符串一样对待$servers
。怎么了?
答案 0 :(得分:1)
由于您的输入参数($env:servers
)是多行字符串,因此$servers
也将是单个多行字符串。
要将其与foreach
一起使用,它必须是一个字符串数组,您将需要分割$env:servers
,以便$servers
成为字符串数组,每行一个项目。使用Split()
(blog on this subject)非常简单:
$servers = ($env:servers).Split([Environment]::NewLine, [StringSplitOptions]::RemoveEmptyEntries)
这将在NewLine
上分割,并通过从最终输出中删除空条目来处理任何空白行。
显示此行为的示例代码,以供将来参考:
$input_servers = @"
server1
server2
server3
"@
$servers = $input_servers.Split([Environment]::NewLine, [StringSplitOptions]::RemoveEmptyEntries)
foreach ($server in $servers) {
Write-Output "Server Name: $server"
}