PowerShell。将逗号分隔的值转换为单独的对象

PowerShell。将逗号分隔的值转换为单独的对象,powershell,azure-devops,Powershell,Azure Devops,我在Azure DevOps管道中有一个PowerShell脚本,它输出Web应用程序可以使用的可能IP地址列表: $deploymentOutputs=(ConvertFrom-Json '$(deploymentOutputs)') $possibleOutboundIpAddresses=$($deploymentOutputs.possibleOutboundIpAddresses.value) Write-Host $possibleOutboundIpAddresses 输出如下所

我在Azure DevOps管道中有一个PowerShell脚本,它输出Web应用程序可以使用的可能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脚本转换为不输出逗号分隔的值,而是将这些值作为每个对象输出

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变量。我实际上需要根据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"
您可以使用String.Split方法:

或-split regex运算符:

$possibleOutboundIpAddresses -split ','
如果要将它们作为对象的属性,可以使用ConvertFrom Csv:

尽管如果$possibleoutboundipAddress可以有数量可变的值,这可能不是最佳策略

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

function ConvertTo-AzureVsoIPVariable {
    $c = 1
    $input -split ',' |ForEach-Object {
      '##vso[task.setvariable variable=$IP{0};]{1}' -f $c++, $_
    }
}
然后使用类似于:

$possibleOutboundIpAddresses | ConvertTo-AzureVsoIPVariable
您可以使用String.Split方法:

或-split regex运算符:

$possibleOutboundIpAddresses -split ','
如果要将它们作为对象的属性,可以使用ConvertFrom Csv:

尽管如果$possibleoutboundipAddress可以有数量可变的值,这可能不是最佳策略

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

function ConvertTo-AzureVsoIPVariable {
    $c = 1
    $input -split ',' |ForEach-Object {
      '##vso[task.setvariable variable=$IP{0};]{1}' -f $c++, $_
    }
}
然后使用类似于:

$possibleOutboundIpAddresses | ConvertTo-AzureVsoIPVariable

顺便说一句:为了避免分心,我可以建议您从命令中删除写主机前缀吗?从PowerShell创建Azure DevOps变量时,写主机实际上是必需的。出于我自己的启发:为什么?如果向成功输出流写入数据,会发生什么情况?写入主机输出通常仅由通过其CLI调用PowerShell的外部调用方捕获,但成功输出也是如此。有关写入主机与写入输出/隐式输出的一般信息,请参阅。简而言之:不要使用写主机输出数据返回值。删除WreWestHead席前缀隐含输出值。如果问题还没有完全解决,请考虑回答或提供反馈。我可以建议您从命令中删除写主机前缀吗?从PowerShell创建Azure DevOps变量时,写主机实际上是必需的。出于我自己的启发:为什么?如果向成功输出流写入数据,会发生什么情况?写入主机输出通常仅由通过其CLI调用PowerShell的外部调用方捕获,但成功输出也是如此。有关写入主机与写入输出/隐式输出的一般信息,请参阅。简而言之:不要使用写主机输出数据返回值。移除WreWestHead席前缀隐含输出值。如果问题尚未完全回答,请考虑回答或提供反馈。