求导出含最后登录日期的Azure/Entra组成员的脚本
导出Azure Entra组成员信息(含最后登录日期)的PowerShell脚本
前置准备
- 安装Microsoft Graph PowerShell模块:
Install-Module Microsoft.Graph -Force -AllowClobber
- 确保你的账号拥有以下Graph权限:
GroupMember.Read.All:读取组成员User.Read.All:读取用户基本信息AuditLog.Read.All:读取用户登录活动数据(获取最后登录日期必需)
完整脚本
# 替换为目标组的ID或显示名称 $groupIdentifier = "目标组ID或显示名称" $outputPath = "Entra组成员信息.csv" # 连接到Microsoft Graph Connect-MgGraph -Scopes "GroupMember.Read.All", "User.Read.All", "AuditLog.Read.All" # 获取目标组对象(如果传入的是显示名称则自动转换为ID) if ($groupIdentifier -match "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$") { $groupId = $groupIdentifier } else { $groupId = (Get-MgGroup -Filter "displayName eq '$groupIdentifier'" -Property Id).Id if (-not $groupId) { Write-Error "未找到指定名称的组" exit 1 } } # 获取组内所有成员 $groupMembers = Get-MgGroupMember -GroupId $groupId -All $true # 遍历成员并收集所需信息 $exportData = foreach ($member in $groupMembers) { # 只处理用户类型的成员(排除组、设备等) if ($member.AdditionalProperties["@odata.type"] -eq "#microsoft.graph.user") { # 获取用户详情,显式请求显示名称、职位和登录活动属性 $user = Get-MgUser -UserId $member.Id -Property displayName, jobTitle, signInActivity [PSCustomObject]@{ "显示名称" = $user.DisplayName "职位头衔" = $user.JobTitle ?? "无" "最后登录日期" = $user.SignInActivity.LastSignInDateTime ?? "从未登录" } } } # 导出到CSV文件 $exportData | Export-Csv -Path $outputPath -NoTypeInformation -Encoding UTF8 Write-Host "导出完成,文件路径:$outputPath"
关键说明
- 最后登录日期的获取:用户的最后登录日期存储在
signInActivity属性中,必须显式通过-Property参数指定才能返回该字段,这是常见的踩坑点。 - 权限要求:
AuditLog.Read.All权限是读取signInActivity的必要条件,缺少该权限会导致最后登录日期返回空值。 - 非用户成员过滤:组内可能包含其他组、设备等对象,脚本通过
@odata.type过滤仅处理用户类型。 - 空值处理:对职位和未登录用户的情况做了默认值填充,避免导出的CSV出现空单元格。
内容的提问来源于stack exchange,提问作者Admaine
相关产品推荐
相关产品推荐

