如何用PowerShell按用户组获取Azure过去30天的用户登录记录?
Azure AD按用户组筛选30天成功登录记录方案
一、Azure门户直接筛选限制
当前Azure AD登录审计面板不支持直接按安全/用户组筛选,仅能通过单个用户名、IP地址、应用等维度进行查询,批量按组筛选需通过脚本或Microsoft Graph API实现。
二、PowerShell实现步骤(基于Microsoft Graph模块)
1. 准备工作
确保已安装Microsoft Graph PowerShell模块,若未安装,执行:
Install-Module Microsoft.Graph -Force -AllowClobber
2. 连接Microsoft Graph
需要AuditLog.Read.All、User.Read.All、GroupMember.Read.All权限:
Connect-MgGraph -Scopes "AuditLog.Read.All", "User.Read.All", "GroupMember.Read.All"
3. 获取目标组内的所有用户
替换$groupName为你的目标组名称或直接用组ID:
# 替换为目标组名称 $groupName = "你的安全组名称" $group = Get-MgGroup -Filter "displayName eq '$groupName'" # 获取组内所有用户(排除组嵌套) $groupUsers = Get-MgGroupMember -GroupId $group.Id -All $true | Where-Object {$_.AdditionalProperties.'@odata.type' -eq '#microsoft.graph.user'} $userIds = $groupUsers.Id
4. 查询组内用户30天成功登录记录
筛选条件:过去30天、登录状态为成功(错误码0):
$startDate = (Get-Date).AddDays(-30).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ") # 获取符合条件的登录记录 $groupSignIns = Get-MgAuditLogSignIn -Filter "createdDateTime ge $startDate and status/errorCode eq 0" -All $true | Where-Object {$userIds -contains $_.UserId}
5. 输出或导出结果
查看关键信息:
$groupSignIns | Select-Object UserDisplayName, UserPrincipalName, CreatedDateTime, IpAddress, AppDisplayName, Status
导出到CSV文件:
$groupSignIns | Select-Object UserDisplayName, UserPrincipalName, CreatedDateTime, IpAddress, AppDisplayName, Status | Export-Csv -Path "Group_SignIns_30Days.csv" -NoTypeInformation
注意事项
- 若目标组包含大量用户,查询登录记录可能耗时较长,
-All $true参数会自动处理分页 - 确保执行脚本的账号拥有对应的Azure AD权限(全局管理员、安全管理员或审计管理员角色)
内容的提问来源于stack exchange,提问作者Forever_Curious
相关产品推荐
相关产品推荐

