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

求修改PowerShell代码筛选指定用户的合规设备(Microsoft Graph API)

获取指定用户的合规设备列表(PowerShell 修正方案)

错误原因分析

你遇到的问题来自两个点:

  1. Get-MgDevice的-DeviceId参数是精准匹配单个设备,此时无法同时使用-Filter参数(参数逻辑冲突);
  2. 代码中变量名写错,$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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 05:22:06