求助:Azure AD用户报表制作,需获取用户名、登录及创建日期等属性
获取Azure AD用户完整报表(含用户名、创建日期、全周期最后登录时间)
解决思路
Azure AD图形界面仅支持查询30天内登录数据,而PowerShell需显式指定所需属性才能获取完整信息。以下分两种场景提供解决方案:
场景1:获取90天内最后登录记录(快速方案)
使用Microsoft Graph PowerShell模块,通过指定signInActivity属性获取最近登录时间,步骤如下:
- 连接Microsoft Graph并申请权限:
Connect-MgGraph -Scopes "User.Read.All", "AuditLog.Read.All"
- 查询用户数据并提取所需字段:
Get-MgUser -All -Select "userPrincipalName, createdDateTime, signInActivity" | Select-Object ` @{Name="用户名"; Expression={$_.userPrincipalName}}, @{Name="创建日期"; Expression={$_.createdDateTime}}, @{Name="最后登录时间"; Expression={$_.signInActivity.lastSignInDateTime}}
说明:
signInActivity.lastSignInDateTime默认保留90天数据,无需额外查询日志。
场景2:获取超过90天的历史登录记录(需依许可证)
若需更早的登录数据,需查询Azure AD登录日志(保留期由租户许可证决定:免费版30天,E3/E5最高1年),步骤如下:
- 先获取所有用户的基础信息:
$users = Get-MgUser -All -Select "id, userPrincipalName, createdDateTime"
- 查询指定时间范围的登录日志并按用户分组取最后一次登录:
# 替换StartDateTime为你需要的起始日期 $signIns = Get-MgAuditLogSignIn -All -Filter "createdDateTime ge 2023-01-01T00:00:00Z" | Group-Object UserId | ForEach-Object { [PSCustomObject]@{ UserId = $_.Name LastSignIn = $_.Group | Sort-Object CreatedDateTime -Descending | Select-Object -First 1 CreatedDateTime } }
- 关联用户数据与登录记录:
$users | ForEach-Object { $userSignIn = $signIns | Where-Object UserId -eq $_.id [PSCustomObject]@{ 用户名 = $_.userPrincipalName 创建日期 = $_.createdDateTime 最后登录时间 = if ($userSignIn) { $userSignIn.LastSignIn } else { "无登录记录" } } }
关于Get-MgUser/Get-AzureADUser属性不全的问题
- 这两个命令默认仅返回核心属性,必须通过
-Select参数显式指定需要的字段(如createdDateTime、signInActivity)才能获取完整数据。 Get-AzureADUser已被微软弃用,推荐使用Get-MgUser(Microsoft Graph PowerShell模块)。
关键注意事项
- 权限要求:执行命令的账号必须拥有
User.Read.All和AuditLog.Read.All权限,否则无法读取用户及登录日志数据。 - 数据限制:超出租户数据保留期的登录记录无法被查询到,需提前确认租户的日志保留策略。
内容的提问来源于stack exchange,提问作者user770022
相关产品推荐
相关产品推荐

