PowerShell实现AD组成员按组单独导出为同名CSV并标注成员类型
实现方案
直接使用下方调整完成的PowerShell脚本即可匹配全部需求:
# 配置目标OU路径、文件导出根目录 $OU = 'OU=Microsoft Exchange Security Groups,DC=Domain,DC=com' $exportRoot = 'D:\ExchangeSecurityGroups_Members' # 自动创建导出目录,避免路径不存在报错 if (-not (Test-Path $exportRoot)) { New-Item -ItemType Directory -Path $exportRoot -Force | Out-Null } # 读取目标OU下的所有AD安全组 $groups = Get-ADGroup -Filter * -SearchBase $OU foreach ($group in $groups) { # 递归拉取组下所有成员(含嵌套组成员),提取要求的3个字段 $members = Get-ADGroupMember -Identity $group -Recursive | Select-Object ` @{Name='AD用户名'; Expression={$_.SamAccountName}}, @{Name='显示名'; Expression={$_.Name}}, @{Name='成员类型'; Expression={$_.objectClass}} # 过滤组名里的非法文件名字符,防止写入失败 $validGroupName = $group.Name -replace '[\\/:*?"<>|]', '_' $outputPath = Join-Path $exportRoot "$validGroupName.csv" # 按组名单独导出CSV,使用UTF8编码避免乱码 $members | Export-Csv -Path $outputPath -NoTypeInformation -Encoding UTF8 }
脚本对应解决的原有问题
- 不再将所有组成员合并到单个文件,遍历每个组时单独生成和组名同名的CSV文件
- 新增
成员类型字段,直接通过AD返回的objectClass属性标识成员是用户(user)、组(group)还是其他对象,嵌套组的成员也会被正确递归识别 - 导出字段严格匹配需求,仅保留AD用户名、显示名、成员类型三个字段,后续重建组时可以直接读取复用
- 增加了非法文件名处理、目录自动创建、UTF8编码等兼容逻辑,避免运行时出现非预期错误
运行脚本前请确保当前终端已加载Active Directory模块,且执行账号拥有对应OU的组、成员读取权限。
内容的提问来源于stack exchange,提问作者Senior Systems Engineer
相关产品推荐
相关产品推荐

