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

Azure自动化Runbook迁移至系统托管身份后Set-AzureADDevice报错排查

问题解决:迁移至系统分配托管身份后修改AAD非Windows设备报错

错误原因分析

你遇到的Set-AzureADDevice报错并非权限问题,而是AzureAD模块的固有限制:该模块仅允许修改Windows设备的核心属性(如AccountEnabled),非Windows设备(比如你要处理的通信客户端设备)只能修改ExtendedAttribute1至ExtendedAttribute15这15个扩展属性,无法操作禁用、删除等核心状态。

另外,你给托管身份添加的订阅Contributor角色仅针对Azure资源管理,对Azure AD的设备管理无权限,需要配置Azure AD层面的Graph权限。

解决方案

1. 切换到Microsoft Graph PowerShell模块

放弃AzureAD模块,改用Microsoft Graph PowerShell模块——它对设备对象的操作无设备类型限制,支持修改所有设备的核心属性。

2. 配置托管身份的Graph权限

在Azure AD中给系统分配托管身份添加以下应用权限(必须是应用权限,而非委派权限),并授予管理员同意:

  • Device.ReadWrite.All:用于读写所有设备对象(推荐,权限范围匹配需求)
  • 或Directory.ReadWrite.All:更高权限的目录读写权限(按需选择)

操作步骤:

  • 进入Azure门户 → Azure Active Directory → 企业应用 → 找到你的托管身份(名称等于虚拟机/服务名称)
  • 点击“权限” → “添加权限” → 选择“Microsoft Graph” → “应用权限”
  • 搜索并添加上述权限后,点击“授予管理员同意”

3. 修改脚本代码

连接Graph(替代原AzureAD连接逻辑)

# 用系统分配托管身份连接Microsoft Graph
Connect-MgGraph -Identity -Scopes "Device.ReadWrite.All"

# 若脚本需关联订阅资源,可设置上下文
$azureContext = Connect-AzAccount -Identity
Set-MgContext -SubscriptionId $azureContext.Subscription.Id

禁用/删除陈旧通信客户端设备示例

# 筛选陈旧设备(示例:最后登录时间超过90天、非Windows设备)
$staleDevices = Get-MgDevice -Filter "DeviceOSType ne 'Windows' and LastLoginDateTime le $((Get-Date).AddDays(-90).ToString('yyyy-MM-ddTHH:mm:ssZ'))" -All

foreach ($device in $staleDevices) {
    # 禁用设备
    Update-MgDevice -DeviceId $device.Id -AccountEnabled:$false
    
    # 如需删除设备(不可逆,谨慎操作)
    # Remove-MgDevice -DeviceId $device.Id
}

关键注意事项

  • 权限授予后需等待5-10分钟生效,避免立即执行脚本仍报错
  • 测试阶段建议缩小筛选范围(比如只筛选1-2台设备),验证操作无误后再批量执行
  • 删除设备为不可逆操作,请确保目标设备确实是无需保留的陈旧客户端

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 12:20:23