У меня есть следующая задача конвейера 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
» в командлете «ConvertTo-Json
», чтобы преобразовать объект в однострочную строку в формате JSON. Затем передайте однострочную строку в качестве значения переменной конвейера.
$roleAssignmentsJson = ConvertTo-Json -InputObject $roleAssignments -Compress
Write-Host "##vso[task.setvariable variable=RoleAssignmentsObject]$roleAssignmentsJson"