使用输入列表在PowerShell中检索并导出AD安全组成员
嘿,恭喜你已经写出第一个实用的PowerShell脚本啦!要实现批量处理AD组、不用手动重复输入组名,其实很简单,核心思路就是先准备好组列表文件,再让脚本循环读取并处理每个组。下面给你两种最常用的实现方式:
方法1:用文本文件存组列表(每行一个组名)
这是最直观的方式,适合组列表不多的情况:
- 先创建一个文本文件,比如
C:\ADGroups.txt,把你要处理的安全组名称逐行写进去,比如:
Sales-Team HR-Admins IT-Support Finance-Group
- 然后用下面的脚本批量导出:
# 读取文本文件里的所有组名 $groupList = Get-Content -Path "C:\ADGroups.txt" # 循环处理每个组 foreach ($group in $groupList) { # 跳过文件里的空行,避免无意义的错误 if ([string]::IsNullOrWhiteSpace($group)) { continue } try { # 获取组成员,同时给每条记录加上组名列(方便后续区分) Get-ADGroupMember -Identity $group -ErrorAction Stop | Select-Object samaccountname, @{Name='GroupName'; Expression={$group}} | # 每个组导出到单独的CSV文件,文件名包含组名,防止覆盖 Export-Csv -Path "C:\ADGroup_$($group -replace '[\\/:*?"<>|]', '_').csv" -NoTypeInformation Write-Host "✅ 成功导出组 [$group] 的成员" -ForegroundColor Green } catch { # 捕获并显示错误,比如组不存在、权限不足等情况 Write-Host "❌ 处理组 [$group] 失败:$($_.Exception.Message)" -ForegroundColor Red } }
小贴士:脚本里用-replace替换了组名里的非法字符,避免生成无效的文件名。
方法2:用CSV文件存组列表(适合带额外信息的场景)
如果你的组列表是从其他系统导出的(比如带部门、备注等信息),可以用CSV文件:
- 创建CSV文件
C:\ADGroups.csv,格式如下(第一行是表头):
GroupName,Department Sales-Team,Sales HR-Admins,Human Resources IT-Support,Technology
- 对应的批量处理脚本:
# 读取CSV文件 $groupList = Import-Csv -Path "C:\ADGroups.csv" foreach ($row in $groupList) { $group = $row.GroupName if ([string]::IsNullOrWhiteSpace($group)) { continue } try { Get-ADGroupMember -Identity $group -ErrorAction Stop | # 可以顺便把CSV里的其他信息(比如部门)也加上 Select-Object samaccountname, @{Name='GroupName'; Expression={$group}}, @{Name='Department'; Expression={$row.Department}} | # 把所有组成员合并到一个CSV文件里 Export-Csv -Path "C:\AllADGroupMembers.csv" -NoTypeInformation -Append Write-Host "✅ 成功导出组 [$group] 的成员" -ForegroundColor Green } catch { Write-Host "❌ 处理组 [$group] 失败:$($_.Exception.Message)" -ForegroundColor Red } }
如果只想导出用户成员(排除计算机、联系人等对象),可以在Get-ADGroupMember后面加上| Where-Object {$_.objectClass -eq 'user'}。
最后提醒一下:运行脚本的账号需要有读取Active Directory组的权限哦!
内容的提问来源于stack exchange,提问作者WestCoastGuy
相关产品推荐
相关产品推荐

