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
相关产品推荐
相关产品推荐

