Петли PowerShell и Дженкинс Foreach - PullRequest
0 голосов
/ 30 октября 2018

У меня есть функция в Powershell, и я хочу запустить ее на многих серверах.

Он запускается из Jenkins через шаг Powershell, входной параметр $env:servers настроен как «строка из нескольких строк».

Простой пример:

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


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

Но когда я строю его с параметрами, foreach не работает - он обрабатывает $servers как одну строку. Что не так?

1 Ответ

0 голосов
/ 30 октября 2018

Поскольку ваш входной параметр ($env:servers) является многострочной строкой, $servers также будет отдельной многострочной строкой.

Чтобы использовать это с foreach, это должен быть массив строк, вам нужно разделить $env:servers, чтобы $servers становился массивом строк с каждой строкой элемента. Это очень просто сделать, используя Split() ( блог на эту тему ):

$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"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...