如何通过Microsoft Graph PowerShell获取Entra设备的启用/禁用状态
解决Intune设备与Entra状态同步及模块/权限问题
一、修复Get-MgDevice的方法未找到错误
这个报错是Graph PowerShell模块版本冲突或损坏导致的,按以下步骤处理:
- 卸载所有Graph相关模块:
Get-InstalledModule -Name Microsoft.Graph* | Uninstall-Module -Force -AllVersions - 清理残留的模块文件夹(避免旧文件干扰):
Remove-Item -Path "$env:ProgramFiles\WindowsPowerShell\Modules\Microsoft.Graph*" -Recurse -Force -ErrorAction SilentlyContinue Remove-Item -Path "$env:USERPROFILE\Documents\WindowsPowerShell\Modules\Microsoft.Graph*" -Recurse -Force -ErrorAction SilentlyContinue - 重新安装最新版核心模块及所需子模块:
Install-Module -Name Microsoft.Graph -Force -AllowClobber Install-Module -Name Microsoft.Graph.Devices.CorporateManagement -Force -AllowClobber Install-Module -Name Microsoft.Graph.Identity.DirectoryManagement -Force -AllowClobber - 重新连接Graph并指定必要权限范围:
Connect-MgGraph -Scopes "DeviceManagementManagedDevices.Read.All", "Directory.Read.All"
二、高效获取Intune设备+Entra启用状态(避免循环调用)
循环单查Get-MgDevice效率低且易出错,用批量查询合并数据更稳妥:
- 拉取所有Intune托管设备:
$intuneDevices = Get-MgDeviceManagementManagedDevice -All - 批量过滤拉取对应Entra设备信息:
$deviceIds = $intuneDevices.DeviceId | ForEach-Object { "'$_'" } -join "," $entraDevices = Get-MgDevice -Filter "deviceId in ($deviceIds)" -All - 合并数据集并输出结果:
$combinedDevices = foreach ($intuneDevice in $intuneDevices) { $entraMatch = $entraDevices | Where-Object { $_.DeviceId -eq $intuneDevice.DeviceId } [PSCustomObject]@{ 设备名称 = $intuneDevice.DeviceName 设备ID = $intuneDevice.DeviceId Intune合规状态 = $intuneDevice.ComplianceState Entra启用状态 = $entraMatch.AccountEnabled 系统版本 = $intuneDevice.OSVersion } } # 导出到CSV方便查看 $combinedDevices | Export-Csv -Path "设备合并信息.csv" -NoTypeInformation -Encoding UTF8
三、解决Microsoft.Entra.DirectoryManagement模块加载冲突
Graph模块和Entra模块的程序集存在重复,不要同时混用:
- 优先用Graph PowerShell模块的
Get-MgDevice替代Entra模块的Get-EntraDevice,完全可以实现相同功能,还能避免冲突。 - 如果必须用Entra模块,需先彻底卸载所有Graph模块,再重新安装Entra模块,两者无法共存。
四、验证Intune和Entra权限
- 检查当前Graph连接的权限范围:
确认包含Get-MgContext | Select-Object ScopesDeviceManagementManagedDevices.Read.All(Intune设备读取)和Directory.Read.All(Entra设备读取)。 - 门户手动核对:
- 登录Azure门户,进入Entra ID > 角色和管理员,查看账号是否拥有「目录读取者」「Intune读取者」或更高权限(如全局读取者)。
- 进入Intune > 角色,确认账号具备读取设备的权限。
内容的提问来源于stack exchange,提问作者sailingbikeruk
相关产品推荐
相关产品推荐

