You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Azure DevOps PowerShell脚本中传递JSON参数的问题

解决PowerShell中变量无法传入JSON POST参数的问题

你碰到的问题其实很典型——单引号包裹的Here-String在PowerShell里是不会解析变量的,不管你写$(var)还是$($var),都会被当作纯文本直接输出,这就是为什么硬编码值有效,但变量传不进去的原因。给你几个靠谱的解决方案:

方案1:改用双引号Here-String(需转义内部双引号)

把原来的单引号Here-String换成双引号的,同时给JSON里的双引号加上反引号`转义,这样PowerShell就能正确解析变量了:

$var="demo"
Write-Host $var
$postParams = @"
{ `"scope`": `"DemoScope`",`"principal`": `"$var`" }
"@

方案2:直接使用双引号字符串(同样需转义)

如果不需要多行字符串,也可以直接用普通双引号包裹,同样转义内部的JSON双引号:

$var="demo"
Write-Host $var
$postParams = "{ `"scope`": `"DemoScope`",`"principal`": `"$var`" }"

方案3:推荐用对象转JSON(最可靠)

手动拼接JSON很容易因为引号、特殊字符出错,更推荐的做法是先创建PowerShell对象,再转换成JSON字符串,这样变量替换和格式处理都自动完成了:

$var="demo"
Write-Host $var

# 先定义包含参数的对象
$postObject = [PSCustomObject]@{
    scope = "DemoScope"
    principal = $var
}

# 转换成标准JSON格式
$postParams = $postObject | ConvertTo-Json

这种方法不仅能完美处理变量,就算你的变量里包含特殊字符(比如引号、换行),ConvertTo-Json也会自动帮你转义,避免JSON格式错误。

简单总结下:PowerShell的单引号字符串(包括Here-String)是字面量模式,不会解析任何变量或表达式;只有双引号字符串才会主动展开变量。所以换用双引号相关的写法,或者用对象转JSON的方式,就能解决你的问题啦。

内容的提问来源于stack exchange,提问作者Jayendran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:52:55