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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 06:45:03