在AD域的管理中,OU通常是企业中部门成员的容器,组是用于企业内的授权,这两个不同类别的概念却往往因为相同的成员而成为许多IT管理员的苦恼,例如一个新同事的入职,他的AD账号往往由人事的同事创建并添加到相应OU,而将其添加到对应的各种权限组,则成为了IT管理员一件十分繁琐的事情,下面我们将演示如何利用Powershell脚本来省去IT管理员的这项工作。
一、 创建用户组
要实现自动同步必须让程序知道源数据和目标数据的对应关系,本脚本利用用户组的注释属性进行对应,你可以根据自己情况使用其它属性操作。我们在用户组注释栏内填入需要同步OU的DN路径。
二、 编制脚本
OuSync.ps1内容如下:
#自动同步AD中OU成员到对应组中 $LogName = "C:\users\AddNewUsers_Log.csv" #获取组名 $VDIGroups = Get-ADGroup -Filter {info -Like "OU=*"} -SearchBase ",OU=sale,OU=users,DC=chery,DC=com" -Properties info #准备添加成员 Foreach ($VDIGroup in $VDIGroups) { #获取成员所在OU $SearchBase = Get-ADOrganizationalUnit $VDIGroup.info #获取OU中成员 $Members = Get-aduser -Filter {Enabled -eq "true"} -SearchBase $SearchBase #获取VDIGroup中已存在的成员 $ExistMembers = Get-ADGroupMember -Identity $VDIGroup #比对成员是否已存在组中 Foreach ($Member in $Members){ $ExistStatus=0 Foreach($ExistMember in $ExistMembers){ #比对成员是否已存在组中 if( $ExistMember.ObjectGUID -eq $Member.ObjectGUID ){ $ExistStatus=1 } } if ($ExistStatus -eq "0"){ #不在组中则生成日志 (Get-Date).ToString('yyyy-MM-dd HH:mm:ss') + ',' + $VDIGroup.Name + ',' + $Member.Name |Out-File -FilePath $LogName -Append -Encoding utf8 #添加成员 Add-ADGroupMember -Identity $VDIGroup.ObjectGUID -Members $Member } } }
三、 创建计划任务
计划任务定时运行脚本需要注意的是使用具备权限的用户帐户;