我有以下 YAML 管道任务:
- task: PowerShell@2
name: ReadrbacFromTemplate
displayName: Read RBAC Assignments from Template
inputs:
filePath: '$(System.DefaultWorkingDirectory)/Get-AzRolesFromTemplate.ps1'
arguments: '-BuildDirectory "$(Build.ArtifactStagingDirectory)"'
showWarnings: true
包含脚本的文件在我的计算机上的本地 PowerShell 会话中运行良好。 脚本的最后几行是:
$roleAssignmentsJson = ConvertTo-Json $roleAssignments
Write-Host "##vso[task.setvariable variable=RoleAssignmentsObject]$roleAssignmentsJson"
即使当我测试将 JSON 字符串转换回对象时,它也能工作:
$assignments = ConvertFrom-Json -InputObject $roleAssignmentsJson
但是,在 YAML 管道中,JSON 字符串打印时缺少左括号。 因此,管道中的下一个任务因以下错误而失败:
ConvertFrom-Json : Invalid array passed in, ']' expected. (1): [
我确认第一个任务确实输出了缺少左括号的字符串:
{
"PrincipalId": "PLACEHOLDER",
"RoleDefinitionId": "b24988ac-6180-42a0-ab88-20f7382dd24c"
},
{
"PrincipalId": "PLACEHOLDER",
"RoleDefinitionId": "00482a5a-887f-4fb3-b363-3b7fe8e74483"
},
{
"PrincipalId": "PLACEHOLDER",
"RoleDefinitionId": "73c42c96-874c-492b-b04d-ab87d138a893"
}
]
我在这上面花了很多时间,但不确定我错过了什么。
谢谢。
管道变量只能接收一行字符串类型值。如果将多行值传递给管道变量,它只接收第一行。
对于您的情况,您可以使用“
-Compress
”cmdlet 上的参数“ConvertTo-Json
”将对象转换为单行 JSON 格式的字符串。然后将这一行字符串作为管道变量的值传递。
$roleAssignmentsJson = ConvertTo-Json -InputObject $roleAssignments -Compress
Write-Host "##vso[task.setvariable variable=RoleAssignmentsObject]$roleAssignmentsJson"