PowerShell 是管理 Active Directory 域组成员最实用、最可控的自动化工具,支持批量处理、精准过滤、嵌套逻辑及外部数据联动,需正确加载 AD 模块、确认权限并遵循安全操作规范。PowerShell 是管理 Active Directory 域组成员最实用、最可控的自动化工具。它不依赖图形界面,能批量处理、精准过滤、支持嵌套逻辑,还能与 CSV、文本或数据库联动。关键在于用对 cmdlet、理清对象路径,并注意权限和作用域限制。
确认并加载 AD 模块
确保运行环境已安装 rsat-ad-powershell 功能:
- 在域控制器或已安装管理工具的 Windows Server / 管理机上执行:
Install-WindowsFeature -Name RSAT-AD-PowerShell -IncludeAllSubFeature - 导入模块(通常自动加载,显式调用更稳妥):
Import-Module ActiveDirectory - 验证权限:当前用户需具备对目标 OU 和组的“写入成员”权限(如 Domain Admin 或委派的组管理权限)
批量添加用户到指定组
这是最常见场景,例如将部门全员加入安全组:
- 从 CSV 文件读取用户名(含 SamAccountName 或 DistinguishedName):
$users = Import-Csv "C:\users.csv" | ForEach-Object { Get-ADUser -Identity $_.SamAccountName } - 直接添加(推荐使用 Add-ADGroupMember,比 Set-ADGroup 更安全):
Add-ADGroupMember -Identity "BBBemployees" -Members $users - 若用户分散在不同 OU,可用过滤条件一次性获取:
$users = Get-ADUser -Filter {Department -eq "AAA分公司"} -SearchBase "OU=Users,DC=domain,DC=com"
处理嵌套组与跨域成员
AD 支持组嵌套,但 PowerShell 默认不递归解析成员。如需拉取“组中组”的完整成员列表,需手动展开:
- 获取某组所有直接成员(含用户和子组):
$members = Get-ADGroupMember -Identity "ITAdminsTest" - 区分类型并递归提取用户:
$allUsers = @(); foreach ($m in $members) { if ($m.objectClass -eq 'user') { $allUsers += $m } elseif ($m.objectClass -eq 'group') { $allUsers += Get-ADGroupMember -Identity $m.DistinguishedName | Where-Object objectClass -eq 'user' } } - 注意:跨林或跨域组成员需确保信任关系正常,且当前会话有对应域控制器访问权限
安全移除与条件更新成员
避免误删,建议先查后改;支持基于属性动态同步:
- 仅移除已离职用户(Status 属性为 Disabled):
$disabled = Get-ADUser -Filter {Enabled -eq $false} | Where-Object {$_.DistinguishedName -in (Get-ADGroupMember "BBBemployees").DistinguishedName}
Add-ADGroupMember -Identity "BBBemployees" -Members $disabled -WhatIf(先试运行) - 用 Compare-Object 实现组成员“差量同步”:
对比源数据(如 HR 系统导出名单)与当前组成员,只增删变动项,不扰动其他配置 - 操作前建议备份当前成员:
(Get-ADGroupMember "BBBemployees").DistinguishedName | Out-File "C:\backup_BBBemployees.txt"

















