PowerShell. Преобразование значений, разделенных запятыми, в отдельные объекты - PullRequest
1 голос
/ 13 марта 2020

У меня есть сценарий PowerShell в Azure DevOps Pipeline, который выводит список возможных IP-адресов, которые может использовать веб-приложение:

$deploymentOutputs=(ConvertFrom-Json '$(deploymentOutputs)')
$possibleOutboundIpAddresses=$($deploymentOutputs.possibleOutboundIpAddresses.value)
Write-Host $possibleOutboundIpAddresses

Вывод выглядит следующим образом:

23.89.272.2,52.165.130.123,40.222.30.223

Как я могу преобразовать скрипт PowerShell, чтобы выводить не значения, разделенные запятыми, а выводить эти значения как Each-Object?

23.89.272.2
52.165.130.123
40.222.30.223

В идеале, я хотел бы также иметь возможность добавлять собственный текст до значения:

IP1 - 23.89.272.2
IP2 - 52.165.130.123
IP3 - 40.222.30.223

РЕДАКТИРОВАТЬ: Приведенные выше примеры были упрощением того, что я пытаюсь сделать. Что мне действительно нужно сделать, это создать Azure переменную DevOps для каждой записи в этом выводе. На самом деле мне нужно выполнить эти команды PowerShell на основе количества IP-адресов и значений IP-адресов:

Write-Host "##vso[task.setvariable variable=$IP1;]23.89.272.2"
Write-Host "##vso[task.setvariable variable=$IP2;]52.165.130.123"
Write-Host "##vso[task.setvariable variable=$IP3;]40.222.30.223"

1 Ответ

5 голосов
/ 13 марта 2020

Вы можете использовать метод String.Split():

$possibleOutboundIpAddresses.Split(",")

или оператор регулярного выражения -split:

$possibleOutboundIpAddresses -split ','

Если вы хотите использовать их как свойства объекта , вы можете использовать ConvertFrom-Csv:

$ipAddressObject = $possibleOutboundIpAddresses |ConvertFrom-Csv -Header IP1,IP2,IP3

Хотя это может быть не самой лучшей стратегией, если $possibleOutboundIpAddresses может иметь переменное количество значений


Для генерации Azure Объявления переменных DevOps вы можете сделать что-то вроде:

function ConvertTo-AzureVsoIPVariable {
    $c = 1
    $input -split ',' |ForEach-Object {
      '##vso[task.setvariable variable=$IP{0};]{1}' -f $c++, $_
    }
}

Затем используйте как:

$possibleOutboundIpAddresses | ConvertTo-AzureVsoIPVariable
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...