使用PowerShell调用Graph API添加Intune合规策略时JSON报错求助
解决PowerShell调用Microsoft Graph API时的JSON格式错误问题
你遇到的"Provided JSON isn't in valid JSON format"和"Invalid JSON primitive: True"错误,大多是PowerShell里JSON字符串的写法不符合规范导致的,结合你的代码片段,我整理了几个关键修复点:
1. 修正Here-String的语法格式
你用@"定义JSON字符串的时候,犯了一个常见的PowerShell语法错误:@"后面不能直接跟空格或内容,必须换行,而且结尾的"@`也要单独占一行,前面不能有任何空格或字符。
错误写法:
$JSON_Android = @" { "@odata.type": "#microsoft.graph.androidCompliancePolicy", ... } "@
正确写法:
$JSON_Android = @" { "@odata.type": "#microsoft.graph.androidCompliancePolicy", "displayName": "Google_Android_Device_Compliance", "passwordRequired": true, "passwordMinimumLength": 6, "passwordRequiredType": "devicePassword", "osMinimumVersion": "10.0" } "@
2. 统一JSON布尔值为小写
JSON规范里的布尔值必须是小写的true/false,而PowerShell里的布尔值是$True/$False(大写开头)。如果你的JSON里写了True,API会把它识别为无效的JSON原始值,这就是你看到"Invalid JSON primitive: True"的原因。
把所有布尔值改成小写即可,比如把"passwordRequired": True改成"passwordRequired": true。
3. 提前验证JSON格式
在调用API之前,先用PowerShell的ConvertFrom-Json命令验证你的JSON是否有效,这样能提前发现格式问题:
try { $JSON_Android | ConvertFrom-Json -ErrorAction Stop Write-Host "✅ JSON格式验证通过" } catch { Write-Host "❌ JSON格式错误: $_" }
4. 确保API请求头设置正确
调用Graph API时,必须指定Content-Type为application/json,否则API无法正确解析你的请求体。完整的调用示例如下:
# 假设你已经获取了有效的访问令牌$token $uri = "https://graph.microsoft.com/v1.0/deviceManagement/deviceCompliancePolicies" try { $response = Invoke-RestMethod -Uri $uri ` -Method Post ` -Headers @{Authorization = "Bearer $token"} ` -Body $JSON_Android ` -ContentType "application/json" Write-Host "合规策略创建成功: $($response.displayName)" } catch { Write-Host "请求失败: $_" }
按照上面的步骤调整后,应该就能解决你遇到的JSON格式问题了。
内容的提问来源于stack exchange,提问作者Thomas Cox
相关产品推荐
相关产品推荐

