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

PowerShell Invoke-RestMethod Body如何实现变量传参并保持结构

PowerShell 动态构造Invoke-RestMethod Body参数实现方案

PowerShell 单引号包裹的字符串为字面量,不会解析内部$开头的变量,要保留原有JSON结构对接Panorama设备,可选择以下两种实现方式:

方案1:对象序列化构造(优先推荐,无格式错误风险)

手动拼接JSON字符串容易出现引号转义错误、数组格式异常问题,最稳妥的方式是先构造和目标JSON结构完全匹配的PowerShell对象,再序列化为JSON字符串,原有$param的其他配置项完全不需要改动。

# 构造与目标JSON结构一致的对象
$payload = @{
    entry = @(
        @{
            '@name' = $HubAddressObject
            static = @{
                member = $ArrayList
            }
        }
    )
}

$param = @{
    # 此处保留你原有$param里的所有配置,比如Uri、Method、Headers、认证参数等
    Body = $payload | ConvertTo-Json -Depth 10 -Compress
    # 剩余原有配置...
}

# 正常调用接口即可
Invoke-RestMethod @param

注意:PowerShell默认ConvertTo-Json的序列化深度为2,会将嵌套层级较深的对象截断,指定-Depth 10可覆盖Panorama接口需要的结构深度;如果$ArrayList是数组类型,序列化时会自动转换为JSON标准数组格式,无需手动拼接成员。

方案2:双引号转义拼接(兼容原有字符串写法)

如果需要保留直接写Body字符串的编码习惯,可将外层单引号替换为双引号,对JSON内部的所有双引号用反引号`转义,数组变量提前序列化为JSON数组格式的字符串即可。

# 提前将数组处理为JSON要求的"值1","值2"格式
$memberContent = $ArrayList | ForEach-Object { "`"$_`"" } | Join-String -Separator ','

$param = @{
    # 此处保留你原有$param里的所有配置
    Body = "{`"entry`":[{`"@name`":`"$HubAddressObject`",`"static`":{`"member`":[$memberContent]}}]}"
    # 剩余原有配置...
}

注意:该方案如果变量内容包含双引号、反斜杠等JSON特殊字符,会导致Body格式非法,接口调用失败,非必要场景优先选择方案1。

调用前可直接输出$param.Body核对结构,确认和预期JSON格式完全一致再发起请求即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 20:57:22