请求编写PowerShell脚本导出多安全组成员至单CSV并解决数量限制
导出多个AD安全组成员到单个CSV并突破数量限制
完整PowerShell脚本
以下脚本可批量导出指定AD安全组的成员到单个CSV文件,包含UserName、UserID、Sec Group三列:
# 导入ActiveDirectory模块(需先安装RSAT-AD组件) Import-Module ActiveDirectory # 替换成你需要导出的安全组名称/DN/SID列表 $securityGroups = "Sales Team", "HR Department", "IT Admins" # 初始化存储结果的数组 $exportResults = @() foreach ($group in $securityGroups) { try { # 先获取组对象,确认组存在并拿到组名 $adGroup = Get-ADGroup -Identity $group -ErrorAction Stop # 获取组成员:-ResultSetSize $null 突破默认1000条限制;加-Recursive可获取嵌套组成员(按需开启) $groupMembers = Get-ADGroupMember -Identity $adGroup -ResultSetSize $null -ErrorAction Stop # -Recursive foreach ($member in $groupMembers) { # 只处理用户类型的成员(排除组、计算机等) if ($member.ObjectClass -eq "user") { $adUser = Get-ADUser -Identity $member -Properties Name, SamAccountName -ErrorAction SilentlyContinue if ($adUser) { # 构造结果对象 $resultObj = [PSCustomObject]@{ "UserName" = $adUser.Name "UserID" = $adUser.SamAccountName "Sec Group" = $adGroup.Name } $exportResults += $resultObj } } } Write-Host "已完成组: $($adGroup.Name)" } catch { Write-Warning "处理组 $group 时出错: $_" } } # 导出到CSV(替换成你要保存的路径) $exportResults | Export-Csv -Path "C:\AD_Group_Members.csv" -NoTypeInformation -Encoding UTF8
突破导出数量限制的方法
PowerShell的AD模块cmdlet(如Get-ADGroupMember、Get-ADUser)默认只返回1000条结果,解决方法如下:
- 取消结果集大小限制:在调用AD cmdlet时添加
-ResultSetSize $null参数,这会让命令返回所有匹配的对象,而非仅前1000条。 - LDAP查询兜底:如果上述方法仍有问题,直接用LDAP过滤器查询成员,示例:
# 获取目标组的DN $groupDN = (Get-ADGroup "Sales Team").DistinguishedName # 用LDAP过滤器查询所有属于该组的用户 Get-ADUser -LDAPFilter "(memberOf=$groupDN)" -ResultSetSize $null -Properties Name, SamAccountName
- 嵌套组成员处理:如果需要导出嵌套在组内的子组成员,在
Get-ADGroupMember后添加-Recursive参数即可。
注意事项
- 运行脚本需要拥有读取AD用户和组信息的权限;
- 客户端系统需手动安装RSAT-AD-PowerShell组件(Windows Server默认自带);
- CSV保存路径需确保当前用户有写入权限,使用
-Encoding UTF8可避免中文乱码。
内容的提问来源于stack exchange,提问作者christian rondon
相关产品推荐
相关产品推荐

