如何获取Azure Active Directory指定组中所有设备的所有者信息
实现方案
完全可以通过PowerShell调用Microsoft Graph接口批量完成操作,无需手动逐台处理,操作前置要求:你需要拥有Azure AD全局读取者、目录读取者或更高的设备管理、组管理权限。
步骤1:安装并连接Microsoft Graph PowerShell模块
# 安装模块(仅首次操作需要执行) Install-Module Microsoft.Graph -Scope CurrentUser # 连接接口并申请所需权限 Connect-MgGraph -Scopes "Device.Read.All", "GroupMember.Read.All", "GroupMember.ReadWrite.All"
步骤2:获取目标组内的所有设备对象
# 替换为你要操作的Azure AD组的对象ID $targetGroupId = "替换为你的组ID" # 如果不知道组ID,可以通过组名查询获取 # Get-MgGroup -Filter "displayName eq '替换为你的组名称'" # 拉取组内所有设备类型的成员 $groupDevices = Get-MgGroupMember -GroupId $targetGroupId -All | Where-Object {$_.AdditionalProperties.'@odata.type' -eq '#microsoft.graph.device'}
步骤3:批量查询所有设备的所有者并去重
$deviceOwnerIds = @() foreach ($device in $groupDevices) { # 拉取设备的注册所有者,默认每台设备仅1个注册所有者 $owner = Get-MgDeviceRegisteredOwner -DeviceId $device.Id -All | Select-Object -First 1 if ($owner) { $deviceOwnerIds += $owner.Id } } # 对所有者ID去重,避免重复添加同一用户到组 $uniqueOwnerIds = $deviceOwnerIds | Select-Object -Unique
未配置注册所有者的设备会自动被跳过,你可以执行
$uniqueOwnerIds.count确认最终要添加的用户总数做校验。
步骤4:批量将所有者添加为目标组成员
foreach ($userId in $uniqueOwnerIds) { New-MgGroupMember -GroupId $targetGroupId -DirectoryObjectId $userId }
可选步骤:删除组内原有的设备成员
如果你确认不需要保留设备类型的组成员,可以执行以下命令批量删除:
foreach ($device in $groupDevices) { Remove-MgGroupMember -GroupId $targetGroupId -DirectoryObjectId $device.Id }
注意事项
- 执行添加/删除操作前,可以先导出
$uniqueOwnerIds和$groupDevices的明细清单做人工核对,避免误操作 - 所有写入类命令都可以加
-WhatIf参数预览执行结果,确认符合预期后再正式运行 - 如果你仍在使用旧版AzureAD PowerShell模块,替换对应cmdlet为
Get-AzureADGroupMember、Get-AzureADDeviceRegisteredOwner、Add-AzureADGroupMember即可实现相同逻辑
内容的提问来源于stack exchange,提问作者thehouseisburning
相关产品推荐
相关产品推荐

