使用PowerShell 管理Active Directory动态用户组
当管理用户对Active Directory域中各种资源的访问权限时,管理员可能需要创建 动态AD用户组。动态组使管理员更容易授予文件服务器、共享文件夹、工作站等的权限。此类动态组应根据域中的用户帐户属性自动将用户添加到组或者从中删除用户。
例如,我们希望将特定OU中的用户自动添加到安全组,或者创建一个包含特定部门的所有用户帐户的组(AD用户属性中的department字段)等。
本地活动目录没有用于实现动态安全组的内置工具。但是,我们可以创建PowerShell脚本,以根据特定条件自动从Active Directory中选择用户,并将其添加到现有AD安全组(可以临时分配成员)或者删除不再满足要求的帐户。更改任何AD用户属性时,脚本必须自动在组中添加或者删除用户。
要使用动态广告组,必须使所有域用户帐户的相关字段保持最新(例如,使用PowerShell脚本创建新用户时,必须立即指定城市、部门、公司等)。
在Exchange Server中, 动态通讯组列表组是根据某些用户条件自动填充的,如AD中“公司/城市”字段中的值、用户所属的OU、邮箱所在的Exchange服务器或者Active Directory中的任何其他用户属性。但是,动态通讯组可用于创建分发,而不是安全组;
Azure AD中有内置的动态群组。在此云目录中,我们可以在安全组或者Office 365组中创建不同的动态成员身份规则。
Windows Server 2012或者更高版本中的 动态访问控制(DAC)部分可用于替换动态安全组的某些函数。
假设我们想将来自多个OU的所有用户自动添加到现有安全组中,在AD用户属性的Department字段中具有值'[Sales]'。我已经编写了下面的PowerShell脚本(要运行它,需要安装 Active Directory for Windows PowerShell Module; Get-ADUsercmdlet用于获取用户属性, Add-ADGroupMember、 Get-ADGroupMember和 Remove-ADGroupMember是管理AD组成员身份的cmdlet。)
## Your AD domain name $ADDomain = 'dc=theitroad,dc=com' ## Dynamic group name $ADGroupname = 'EastSales' ## OU list to search users $ADOUs = @( "OU=Users,OU=NewYork,$ADDomain", "OU=Users,OU=Chicago,$ADDomain" ) $users = @() # Searching users in the specified OUs foreach($OU in $ADOUs){ $users += Get-ADUser -SearchBase $OU -Filter {Department -like "Sales"} } foreach($user in $users) { Add-ADGroupMember -Identity $ADGroupname -Members $user.samaccountname -ErrorAction SilentlyContinue } ## Make sure that each user in the group meets the selection criteria. If not (moved to another OU, changed the Department field), they must be removed from the group $members = Get-ADGroupMember -Identity $ADGroupname foreach($member in $members) { if($member.distinguishedname -notlike "*OU=Users,OU=NewYork,$ADDomain*" -and $member.distinguishedname -notlike "*OU=Users,OU=Chicago,$ADDomain*") { Remove-ADGroupMember -Identity $ADGroupname -Members $member.samaccountname -Confirm:$false } if ((Get-ADUser -identity $member -properties Department|Select-Object Department).department -notlike "Sales" ) { Remove-ADGroupMember -Identity $ADGroupname -Members $member.samaccountname -Confirm:$false } }
运行脚本,确保指定OU中部门字段中“Sales”的所有用户都已自动添加到 EastSales组中。不符合这些条件的用户将从组中删除。
我们必须手动运行脚本,但最好是通过任务计划程序中具有管理AD中用户和组的权限的帐户下的单独任务定期运行它。(建议不要在域管理员帐户下运行脚本,我们应该将AD组管理权限委派给一个常见的用户/管理员帐户或者gMSA账户。)
我们可以将此PowerShell脚本用作在AD中创建动态用户组的规则的框架。