PowerShell调用Soti MobiControl API更新设备组自定义属性报错求解
问题原因
报错customAttributeValue: Error parsing value是请求体结构不符合Soti MobiControl API要求导致的,同时你的代码还存在URI占位符未替换、冗余循环的问题。
修复步骤
- 替换URI占位符
你当前URI中的{Custom_Attribute_Name}是官方文档的占位标识,需要替换为你在MobiControl后台创建的自定义属性的准确名称,删除大括号,大小写必须完全匹配。例如属性名为DeptName时,URI后缀为/customAttributes/DeptName - 修改请求体结构
设备组自定义属性更新的PUT接口要求请求体直接传入字符串格式的属性值,不需要包装为带customAttributeValue键的JSON对象,修改请求体代码为:# 字符串值需要包裹双引号,符合JSON格式要求 $Body1 = "`"$groupname`"" - 优化循环逻辑避免重复请求
你当前调用/devices接口获取设备路径再匹配设备组的逻辑完全冗余,同一个设备组下有多台设备时会重复调用更新接口,直接遍历/devicegroups接口返回的组列表即可,完整优化后的代码如下:$Header1 = @{ "Authorization" = "Bearer " + $Token } try { # 仅需要调用设备组接口即可 $groupList = Invoke-RestMethod -Uri "https://$MCFQDN/MobiControl/api/devicegroups" -Headers $Header1 } catch { Write-Host "获取设备组列表失败:$($_.Exception.Message)" exit } foreach ($group in $groupList) { # 对整个referenceId前缀+值做URL编码,避免特殊字符导致URL解析错误 $encodedRefId = [System.Web.HttpUtility]::UrlEncode("referenceId:$($group.ReferenceId)") # 替换为你实际的自定义属性名 $uri = "https://$MCFQDN/MobiControl/api/devicegroups/$encodedRefId/customAttributes/你的自定义属性名" $groupName = ($group.Path).Split('\')[-1] $body = "`"$groupName`"" try { Invoke-RestMethod -Uri $uri -Method PUT -Body $body -Headers $Header1 -ContentType "application/json" Write-Host "更新设备组 $($group.Path) 自定义属性成功" } catch { Write-Host "更新设备组 $($group.Path) 失败:$($_.Exception.Message)" } } - 确认接口版本适配
如果你使用的是MobiControl 15以下版本,referenceId前缀可能不需要添加,可尝试直接将$encodedRefId替换为$group.ReferenceId测试。
内容的提问来源于stack exchange,提问作者m12345
相关产品推荐
相关产品推荐

