PowerShell脚本:如何在用户跨OU移动时自动调整AD安全组成员身份
PowerShell AD用户OU与同名安全组自动同步脚本
前置要求
- 运行环境需预先安装
ActiveDirectoryPowerShell模块(域控制器默认自带,成员终端可通过安装RSAT-AD-PowerShell功能获取) - 执行账号需拥有AD用户组成员修改、AD对象查询权限
- 所有OU对应的同名安全组已提前在AD中创建完成
实现逻辑
- 扫描指定根OU下的所有AD用户,自动匹配用户当前所在OU的同名安全组
- 自动清理用户所属的、非当前OU对应的其他同名OU安全组
- 自动将用户加入当前OU对应的同名安全组
OU结构参考:
完整脚本
# 导入AD模块 Import-Module ActiveDirectory -ErrorAction Stop # -------------------------- 请修改以下参数为实际环境值 -------------------------- # 要扫描的根OU可分辨名称 $rootOU = "OU=你的根OU名称,DC=你的域名,DC=com" # ------------------------------------------------------------------------------ # 获取根OU下所有启用的AD用户 $allUsers = Get-ADUser -Filter * -SearchBase $rootOU -SearchScope Subtree foreach ($user in $allUsers) { # 获取用户当前所在OU的名称 $userOUPath = $user.DistinguishedName.Split(',', 2)[1] $currentOU = Get-ADOrganizationalUnit -Identity $userOUPath $currentOUName = $currentOU.Name # 查找当前OU对应的同名安全组 $targetGroup = Get-ADGroup -Filter "Name -eq '$currentOUName'" -ErrorAction SilentlyContinue if (-not $targetGroup) { Write-Warning "未找到OU[$currentOUName]对应的同名安全组,跳过用户$($user.SamAccountName)的处理" continue } # 获取用户当前所有所属组,过滤出所有和OU同名的安全组 $userAllGroups = Get-ADPrincipalGroupMembership -Identity $user $ouRelatedGroups = $userAllGroups | Where-Object { $_.Name -in (Get-ADOrganizationalUnit -Filter * -SearchBase $rootOU | Select-Object -ExpandProperty Name) } # 移除不属于当前OU的同名安全组 foreach ($group in $ouRelatedGroups) { if ($group.Name -ne $currentOUName) { Remove-ADGroupMember -Identity $group -Members $user -Confirm:$false -ErrorAction SilentlyContinue Write-Host "已将用户$($user.SamAccountName)从旧OU组[$($group.Name)]中移除" } } # 检查是否已加入当前OU的同名组,未加入则添加 $isInTargetGroup = $ouRelatedGroups | Where-Object { $_.Name -eq $currentOUName } if (-not $isInTargetGroup) { Add-ADGroupMember -Identity $targetGroup -Members $user -Confirm:$false Write-Host "已将用户$($user.SamAccountName)加入当前OU组[$currentOUName]" } } Write-Host "所有用户同步处理完成"
使用注意
- 首次测试请在
Remove-ADGroupMember和Add-ADGroupMember命令后添加-WhatIf参数,确认执行动作符合预期后再删除该参数正式运行 - 如需实现自动同步,可将脚本添加到Windows任务计划程序,设置每1-2小时执行一次即可
内容的提问来源于stack exchange,提问作者William Schubach
相关产品推荐
相关产品推荐

