在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
}
}
}
三、 创建计划任务
计划任务定时运行脚本需要注意的是使用具备权限的用户帐户;