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

POST请求Body中无法使用双引号引用变量的问题

解决PowerShell中Invoke-WebRequest Body里变量无法解析的问题

你的核心问题是单引号包裹的字符串无法解析变量,双引号包裹又会和JSON里的引号冲突,给你三个靠谱的解决方法:

方法1:使用Here-String(最直观)

Here-String用@"开头和"@结尾,内部可直接用双引号,变量也能正常解析,无需额外转义:

$response = Invoke-WebRequest -Uri 'BLAHBLAHBLAH' -Method POST `
   -Headers $headers `
   -ContentType 'application/json' `
   -Body @"
{
    "archived":false,
    "warranty_months":null,
    "depreciate":false,
    "supplier_id":null,
    "requestable":false,
    "rtd_location_id":null,
    "last_audit_date":"null",
    "location_id":null,
    "status_id":2,
    "model_id":34,
    "serial":"$SERIAL",
    "name":"$COMPUTERNAME"
}
"@

注意:如果变量本身包含特殊字符,记得给变量加双引号(比如"$SERIAL"),避免JSON格式错误。

方法2:用哈希表转JSON(最规范)

先把要提交的数据存成PowerShell哈希表,再用ConvertTo-Json转换成标准JSON字符串,完全避免引号冲突:

$bodyContent = @{
    archived = $false
    warranty_months = $null
    depreciate = $false
    supplier_id = $null
    requestable = $false
    rtd_location_id = $null
    last_audit_date = "null"
    location_id = $null
    status_id = 2
    model_id = 34
    serial = $SERIAL
    name = $COMPUTERNAME
}

$response = Invoke-WebRequest -Uri 'BLAHBLAHBLAH' -Method POST `
   -Headers $headers `
   -ContentType 'application/json' `
   -Body ($bodyContent | ConvertTo-Json)

这种方法最推荐,PowerShell会自动处理JSON的格式和引号,不易出错,后期修改数据也更方便。

方法3:字符串拼接(适合简单场景)

如果一定要用字符串拼接,用双引号包裹整个JSON,同时把JSON内部的双引号转义(用""或者""):

$response = Invoke-WebRequest -Uri 'BLAHBLAHBLAH' -Method POST `
   -Headers $headers `
   -ContentType 'application/json' `
   -Body "{`"archived`":false,`"warranty_months`":null,`"depreciate`":false,`"supplier_id`":null,`"requestable`":false,`"rtd_location_id`":null,`"last_audit_date`":`"null`",`"location_id`":null,`"status_id`":2,`"model_id`":34,`"serial`":`"$SERIAL`",`"name`":`"$COMPUTERNAME`"}"

这种写法繁琐易出错,不推荐复杂JSON使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 19:56:08