如何通过PowerShell或KQL查询Azure AD用户的禁用/冻结时间及上次登录时间
查询Azure AD用户禁用/冻结时间及上次登录时间方法
注意:Azure AD原生用户属性未直接存储账号禁用、冻结的时间字段,这类操作记录需要从AAD审计日志、风险日志中检索获取
一、PowerShell查询方案
- 前置依赖:安装Azure AD 2.0 PowerShell模块,且操作用户具备Azure AD全局管理员、全局读取者或审计日志读取者权限
- 第一步:登录Azure AD租户
Install-Module -Name AzureAD -Force Connect-AzureAD - 查询指定用户的基础信息及上次登录时间
Get-AzureADUser -Filter "UserPrincipalName eq '目标用户的UPN地址'" | Select-Object ` DisplayName,UserPrincipalName,AccountEnabled,RefreshTokensValidFromDateTime,` @{Name='上次登录时间';Expression={(Get-AzureADAuditSignInLogs -Filter "UserPrincipalName eq '$($_.UserPrincipalName)'" | Select-Object -First 1 -ExpandProperty CreatedDateTime)}} - 查询所有账号禁用操作的记录,获取禁用时间
Get-AzureADAuditDirectoryLogs -Filter "OperationType eq 'Disable account'" | Select-Object ` @{Name='禁用操作时间';Expression={$_.ActivityDateTime}},` @{Name='被禁用用户名';Expression={$_.TargetResources[0].DisplayName}},` @{Name='操作者账号';Expression={$_.InitiatedBy.User.DisplayName}}
二、KQL查询方案
- 前置依赖:已将Azure AD的审计日志、登录日志、风险日志导出到Log Analytics工作区
- 查询所有用户的账号状态和上次登录时间
SigninLogs | where TimeGenerated > ago(90d) // 登录日志默认最长保留90天,可根据实际保留期调整 | summarize 上次登录时间=max(TimeGenerated) by UserPrincipalName,DisplayName,AccountEnabled | project UserPrincipalName,DisplayName,AccountEnabled,上次登录时间 - 查询所有账号禁用操作记录
AuditLogs | where OperationName == "Disable account" | extend 被禁用用户名 = tostring(TargetResources[0].displayName) | extend 操作者UPN = tostring(InitiatedBy.user.userPrincipalName) | project 禁用操作时间=TimeGenerated,被禁用用户名,操作者UPN,操作结果=ResultDescription - 查询账号冻结(风险锁定)记录
RiskyUsers | where RiskState == "atRisk" or RiskDetail contains "locked" | extend 冻结/风险触发时间 = RiskLastUpdatedDateTime | project UserDisplayName,UserPrincipalName,RiskState,冻结/风险触发时间
内容的提问来源于stack exchange,提问作者user17397453
相关产品推荐
相关产品推荐

