求修改PowerShell代码筛选指定用户的合规设备(Microsoft Graph API)
获取指定用户的合规设备列表(PowerShell 修正方案)
错误原因分析
你遇到的问题来自两个点:
Get-MgDevice的-DeviceId参数是精准匹配单个设备,此时无法同时使用-Filter参数(参数逻辑冲突);- 代码中变量名写错,
$deviceId应该是$device.Id。
方案一:基于原有代码优化(筛选用户设备)
无需重复调用Get-MgDevice,直接从用户所有设备中筛选合规项:
Connect-MgGraph $userDisplayName = 'FName LName' $user = Get-MgUser -Filter "Displayname eq '$userDisplayName'" $PrincipalName = $user.UserPrincipalName $Id = $user.Id Write-Host "User Principal Name: $PrincipalName" Write-Host "User Id: $Id" # 获取用户所有设备并筛选合规项 $devices = Get-MgUserOwnedDevice -UserId $Id foreach ($device in $devices) { if ($device.IsCompliant -eq $true) { Write-Host "合规设备ID: $($device.Id)" Write-Host "合规设备名称: $($device.DisplayName)" } }
方案二:高效直接查询(推荐)
通过OData高级筛选,直接获取属于目标用户的合规设备,避免遍历所有设备:
Connect-MgGraph $userDisplayName = 'FName LName' $user = Get-MgUser -Filter "Displayname eq '$userDisplayName'" $userId = $user.Id # 直接筛选属于该用户的合规设备 $compliantDevices = Get-MgDevice -Filter "IsCompliant eq true and RegisteredOwners/any(u:u/id eq '$userId')" -ConsistencyLevel eventual -CountVariable compliantCount Write-Host "用户 $($user.UserPrincipalName) 共有 $compliantCount 台合规设备:" foreach ($device in $compliantDevices) { Write-Host "设备ID: $($device.Id),设备名称: $($device.DisplayName)" }
注意事项
- 确保
Connect-MgGraph已获取足够权限(如Device.Read.All、User.Read.All); - 方案二使用OData的
any运算符,必须搭配-ConsistencyLevel eventual和-CountVariable参数; - 无需保留
Connect-AzureAD,Microsoft Graph PowerShell模块已覆盖所需功能。
内容的提问来源于stack exchange,提问作者user765081
相关产品推荐
相关产品推荐

