获取Azure AD用户完整信息及所有用户最后登录时间的方法问询
获取Azure AD用户完整信息与最后登录记录
一、获取所有Azure AD用户的完整信息
默认Get-AzADUser仅返回基础字段,要拉取用户全量属性,需添加-All $true和-Select *参数,可获取邮箱、部门、创建时间、账户状态等所有可用信息。
示例命令:
# 查看所有用户完整属性(按需筛选字段) Get-AzADUser -All $true -Select * | Select-Object DisplayName, UserPrincipalName, Mail, Department, CreatedDateTime, AccountEnabled, Id
若需导出到本地文件:
# 导出到CSV方便后续分析 Get-AzADUser -All $true -Select * | Select-Object DisplayName, UserPrincipalName, Mail, Department, CreatedDateTime, AccountEnabled, Id | Export-Csv -Path "AzureADUsersFullInfo.csv" -NoTypeInformation
你可以根据需求调整Select-Object后的字段列表,只保留需要的信息。
二、获取用户最后登录记录(突破60天限制)
Azure AD登录日志默认仅保留60天,要获取更长周期的记录,可通过以下方式实现:
1. 配置日志长期存档
将Azure AD登录日志导出到Azure存储账户(可自定义保留周期,最长数年)或Log Analytics工作区,之后从这些存储位置查询历史数据:
- 配置路径:Azure门户 → Azure Active Directory → 监控 → 日志 → 导出设置,添加目标存储账户/Log Analytics工作区并设置保留时长。
- Log Analytics查询示例(Kusto语言):
SigninLogs | where TimeGenerated > ago(365d) // 可修改为需要的时间范围,比如180d | summarize LastSignIn = max(TimeGenerated) by UserPrincipalName, DisplayName | order by LastSignIn desc
2. 通过Microsoft Graph API查询
Graph API的signInLogs端点默认返回30天数据,但如果已配置日志存档,可通过$filter指定更早的时间范围(前提是对应周期的日志已存档)。示例PowerShell调用:
# 获取Graph API访问令牌 $token = (Get-AzAccessToken -ResourceUrl "https://graph.microsoft.com").Token # 查询最近180天的登录记录 $signInLogs = Invoke-RestMethod -Uri "https://graph.microsoft.com/v1.0/auditLogs/signIns?`$filter=createdDateTime ge '$(Get-Date (Get-Date).AddDays(-180) -Format "yyyy-MM-dd")T00:00:00Z'" -Headers @{Authorization = "Bearer $token"} -Method Get # 整理用户最后登录记录 $userSignInData = $signInLogs.value | Group-Object UserPrincipalName | ForEach-Object { [PSCustomObject]@{ UserPrincipalName = $_.Name LastSignInTime = ($_.Group.createdDateTime | Sort-Object -Descending)[0] DisplayName = ($_.Group.displayName | Select-Object -First 1) } } # 导出结果到CSV $userSignInData | Export-Csv -Path "AzureADUserLastSignIn.csv" -NoTypeInformation
3. 筛选从未登录的用户
结合全量用户列表和登录记录,可找出从未登录的用户:
$allUsers = Get-AzADUser -All $true -Select UserPrincipalName, DisplayName $signedInUsers = $userSignInData.UserPrincipalName $neverSignedInUsers = $allUsers | Where-Object { $_.UserPrincipalName -notin $signedInUsers } $neverSignedInUsers | Export-Csv -Path "AzureADUsersNeverSignedIn.csv" -NoTypeInformation
内容的提问来源于stack exchange,提问作者Sérgio Peres
相关产品推荐
相关产品推荐

