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

如何用PowerShell准确获取Azure AD中90天未登录的活跃用户?

准确筛选Azure AD中90天未登录的活跃用户

你的脚本问题出在两方面:一是AzureAD模块已被微软弃用,它返回的SignInActivity.DateTime数据准确性和时效性都差;二是没处理那些从未登录过的用户(这类用户的SignInActivity会是空值,会被误判为符合条件)。

改用Microsoft Graph PowerShell模块能解决这个问题,它能获取更精准的用户登录数据。以下是可行的操作方案:

操作步骤与脚本

  1. 首次运行需安装并导入Microsoft Graph模块:
Install-Module Microsoft.Graph -Force -AllowClobber
Import-Module Microsoft.Graph.Users, Microsoft.Graph.Reports
  1. 连接到Microsoft Graph,需要User.Read.All和AuditLog.Read.All权限:
Connect-MgGraph -Scopes "User.Read.All", "AuditLog.Read.All"
  1. 查询并筛选符合条件的用户:
# 定义90天前的UTC时间点(避免时区误差)
$90DaysAgo = (Get-Date).AddDays(-90).ToUniversalTime()

# 获取所有启用的用户,包含最近登录时间字段
$activeUsers = Get-MgUser -All:$true -Filter "accountEnabled eq true" -Property DisplayName, UserPrincipalName, UserType, CreationType, LastSignInDateTime

# 筛选90天未登录的用户:要么最近登录早于90天前,要么从未登录过
$inactiveUsers = $activeUsers | Where-Object {
    ($_.LastSignInDateTime -lt $90DaysAgo) -or ($null -eq $_.LastSignInDateTime)
} | Select-Object DisplayName, UserPrincipalName, UserType, CreationType, @{Name="LastSignInDateTime"; Expression={$_.LastSignInDateTime}}

$inactiveUsers

关键说明

  • LastSignInDateTime是UTC时间,必须转成UTC再比较,否则会出现时区偏差
  • 微软的登录数据最多有7天延迟,刚登录的用户可能不会立刻更新该字段
  • 如果不需要包含从未登录过的用户,把筛选条件改成($_.LastSignInDateTime -lt $90DaysAgo) -and ($null -ne $_.LastSignInDateTime)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 18:12:10