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)
您可以使用以下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)
| 归档时间: |
|
| 查看次数: |
219 次 |
| 最近记录: |