Powershell和Jenkins foreach循环

时间:2018-10-30 17:02:22

标签: powershell jenkins

我在Powershell中有一个功能,想要在许多服务器上运行它。

它通过Powershell步骤从Jenkins运行,输入参数$env:servers被配置为“多行字符串”。

简单的例子:

function test {
    param(    
        [string]$servername
    )
    #do somthing 
}


$servers = $env:servers 
foreach ($s in $servers) {
    test -servername $s
}

但是当我使用参数构建它时,foreach不起作用-它像对待单个字符串一样对待$servers。怎么了?

1 个答案:

答案 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"
}