如何通过AZ CLI将本地JSON文件导入Azure DevOps库变量组?
使用AZ CLI导入本地JSON到Azure DevOps变量组
修正后的完整脚本
针对你的需求,以下是可以正确导入多个变量(包括普通/秘密变量)的PowerShell脚本:
# 替换为你的JSON文件路径(桌面路径示例:C:\Users\你的用户名\Desktop\var.json) $jsonPath = "C:\Users\<你的用户名>\Desktop\var.json" $orgUrl = "https://dev.azure.com/{你的组织名}" $projectName = "{你的项目名或ID}" # 读取并解析JSON文件 $json = Get-Content -Path $jsonPath | Out-String | ConvertFrom-Json # 处理变量列表,转换为AZ CLI支持的key=value格式 $variableList = @() $secretVarNames = @() foreach ($var in $json.variables.PSObject.Properties) { # 拼接变量名和值 $variableList += "$($var.Name)=$($var.Value.value)" # 记录秘密变量名,后续添加--secret参数 if ($var.Value.isSecret) { $secretVarNames += $var.Name } } # 将变量列表转为空格分隔的字符串 $variablesParam = $variableList -join " " # 构建AZ CLI命令参数 $azCommandArgs = @( "pipelines", "variable-group", "create", "--name", $json.name, "--variables", $variablesParam, "--description", $json.description, "--detect", "false", "--org", $orgUrl, "--project", $projectName ) # 如果有秘密变量,追加--secret参数 if ($secretVarNames.Count -gt 0) { foreach ($secretName in $secretVarNames) { $azCommandArgs += "--secret", $secretName } } # 执行命令 & az @azCommandArgs
原命令的问题说明
Get-Content语法错误:
原命令中Get-Content -Path C:\variables\var.json out-string | out-string参数格式错误,正确写法是通过管道传递给Out-String后,再解析为JSON对象。--variables参数格式不兼容:
AZ CLI的--variables参数不接受PowerShell自定义对象(你代码中的$varname是PSCustomObject),必须传入空格分隔的key=value字符串,或者符合要求的扁平化JSON字符串。
批量导入多个JSON文件(可选)
如果需要批量导入多个变量组JSON文件,可以循环遍历目录中的所有JSON文件:
$jsonDir = "C:\Users\<你的用户名>\Desktop\变量组JSON" $orgUrl = "https://dev.azure.com/{你的组织名}" $projectName = "{你的项目名或ID}" Get-ChildItem -Path $jsonDir -Filter *.json | ForEach-Object { $json = Get-Content -Path $_.FullName | Out-String | ConvertFrom-Json # 后续变量处理、命令构建逻辑同单文件脚本 $variableList = @() $secretVarNames = @() foreach ($var in $json.variables.PSObject.Properties) { $variableList += "$($var.Name)=$($var.Value.value)" if ($var.Value.isSecret) { $secretVarNames += $var.Name } } $variablesParam = $variableList -join " " $azCommandArgs = @( "pipelines", "variable-group", "create", "--name", $json.name, "--variables", $variablesParam, "--description", $json.description, "--detect", "false", "--org", $orgUrl, "--project", $projectName ) if ($secretVarNames.Count -gt 0) { foreach ($secretName in $secretVarNames) { $azCommandArgs += "--secret", $secretName } } Write-Host "正在导入变量组: $($json.name)" & az @azCommandArgs }
内容的提问来源于stack exchange,提问作者albbla91
相关产品推荐
相关产品推荐

