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

AzureAD(EntraID)非本地非来宾闲置用户监控脚本无结果求助

问题解决与修正脚本

核心问题分析

你的脚本无返回结果主要有三个原因:

  1. 空值判断错误:PowerShell中空值是$null而非未定义的$none,原条件永远不成立
  2. 属性未主动获取:Get-MgUser默认不返回SignInActivity和OnPremisesImmutableId,导致筛选时无法读取这些字段
  3. 闲置用户逻辑不全:未覆盖从未登录过的原生用户场景

修正后的脚本

# 预设闲置天数阈值
$inactiveDays = 180
$cutoffDate = (Get-Date).AddDays(-$inactiveDays)

# 获取包含必要属性的用户数据,显式指定属性确保能读取到同步标识和登录记录
$users = Get-MgUser -All -Select UserPrincipalName, UserType, OnPremisesImmutableId, SignInActivity | 
    Where-Object {
        # 筛选Azure原生用户:本地同步用户会有OnPremisesImmutableId,原生用户为空
        $_.OnPremisesImmutableId -eq $null -and
        # 排除来宾用户
        $_.UserType -ne "Guest" -and
        # 筛选闲置用户:超过180天未登录,或从未登录过
        ($_.SignInActivity.LastSignInDateTime -lt $cutoffDate -or $_.SignInActivity -eq $null)
    }

# 格式化输出结果,增加同步状态标识
$users | Select-Object UserPrincipalName, 
    @{Name="是否本地同步"; Expression={if($_.OnPremisesImmutableId){$true}else{$false}}},
    @{Name="最后登录时间"; Expression={if($_.SignInActivity){$_.SignInActivity.LastSignInDateTime}else{"从未登录"}}}

关键说明

  • 用OnPremisesImmutableId识别原生用户:本地AD同步的用户会被填充该属性(对应本地AD对象的objectGUID),Azure原生用户此属性为空,比OnPremisesSyncEnabled更可靠,避免属性为空的问题
  • 显式指定-Select参数:必须主动指定要获取的属性,否则Get-MgUser不会返回登录活动和同步标识数据,导致筛选条件失效
  • 覆盖从未登录的场景:部分原生用户可能从未登录,SignInActivity会为空,这类用户也属于闲置范畴,需要加入筛选逻辑
  • 权限要求:运行脚本需拥有MgGraph的User.Read.All(读取用户信息)和AuditLog.Read.All(读取登录记录)权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 03:02:24