电源外壳。将逗号分隔的值转换为单独的对象

Win*_*oss 1 powershell azure-devops

我在 Azure DevOps Pipeline 中有一个 PowerShell 脚本,它输出 Web 应用程序可以使用的可能 IP 地址列表:

$deploymentOutputs=(ConvertFrom-Json '$(deploymentOutputs)')
$possibleOutboundIpAddresses=$($deploymentOutputs.possibleOutboundIpAddresses.value)
Write-Host $possibleOutboundIpAddresses
Run Code Online (Sandbox Code Playgroud)

输出如下所示:

23.89.272.2,52.165.130.123,40.222.30.223
Run Code Online (Sandbox Code Playgroud)

如何将 PowerShell 脚本转换为不输出逗号分隔值,而是将这些值输出为 Each-Object?

23.89.272.2
52.165.130.123
40.222.30.223
Run Code Online (Sandbox Code Playgroud)

理想情况下,我也希望能够在值之前添加自定义文本:

IP1 - 23.89.272.2
IP2 - 52.165.130.123
IP3 - 40.222.30.223
Run Code Online (Sandbox Code Playgroud)

编辑: 上面的例子是我想要做的事情的过度简化。我真正需要做的是为该输出中的每个条目创建 Azure DevOps 变量。我实际上需要根据 IP 数量和 IP 值执行此 PowerShell 命令:

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"
Run Code Online (Sandbox Code Playgroud)

Mat*_*sen 5

您可以使用以下String.Split()方法:

$possibleOutboundIpAddresses.Split(",")
Run Code Online (Sandbox Code Playgroud)

-split正则表达式运算符:

$possibleOutboundIpAddresses -split ','
Run Code Online (Sandbox Code Playgroud)

如果您希望它们作为对象的属性,您可以使用ConvertFrom-Csv

$ipAddressObject = $possibleOutboundIpAddresses |ConvertFrom-Csv -Header IP1,IP2,IP3
Run Code Online (Sandbox Code Playgroud)

虽然如果$possibleOutboundIpAddresses可以有可变数量的值,这可能不是最好的策略


要生成 Azure DevOps 变量声明,您可以执行以下操作:

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

然后使用像:

$possibleOutboundIpAddresses | ConvertTo-AzureVsoIPVariable
Run Code Online (Sandbox Code Playgroud)