如何修改PowerShell脚本筛选LastSignInDate为空或早于90天的用户
筛选LastSignInDate为空或超过90天未登录的启用用户
以下是修改后的完整PowerShell脚本,可实现你需要的筛选逻辑:
# 连接Microsoft Graph Connect-MgGraph -Scopes Directory.Read.All,AuditLog.Read.All # 计算90天前的零点日期(避免时间部分干扰筛选) $ninetyDaysAgo = (Get-Date).AddDays(-90).Date # 获取符合条件的用户并导出CSV Get-MgUser -All -Filter "accountEnabled eq true" -Property 'UserPrincipalName','SignInActivity','DisplayName', 'AccountEnabled' | Where-Object { # 筛选规则:从未登录(SignInActivity或LastSignInDateTime为空),或登录日期早于90天前 ($null -eq $_.SignInActivity -or $null -eq $_.SignInActivity.LastSignInDateTime) -or $_.SignInActivity.LastSignInDateTime -le $ninetyDaysAgo } | Select-Object @{N='UserPrincipalName';E={$_.UserPrincipalName}}, @{N='DisplayName';E={$_.DisplayName}}, @{N='LastSignInDate';E={$_.SignInActivity.LastSignInDateTime}}, @{N='AccountEnabled';E={$_.AccountEnabled}} | Export-Csv -Path "C:\Suraj\New folder\usernew1.csv" -NoTypeInformation -NoClobber
关键修改说明
- 日期计算:用
(Get-Date).AddDays(-90).Date获取90天前的零点日期,确保筛选逻辑只对比日期部分,不会因当天时间差异误判。如果需要精确到时分秒的比较,去掉.Date即可。 - 筛选逻辑:通过
Where-Object添加双重判断:- 覆盖从未登录过的用户(
SignInActivity或LastSignInDateTime为空); - 覆盖登录日期早于等于90天前的用户。
- 覆盖从未登录过的用户(
- 路径简化:将CSV路径的双反斜杠改为单斜杠,符合PowerShell常规写法,避免不必要的转义。
内容的提问来源于stack exchange,提问作者SRP
相关产品推荐
相关产品推荐

