当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 使用 PowerShell 的 Active Directory 动态用户组

作者:精品下载站 日期:2024-12-14 20:04:27 浏览:16 分类:玩电脑

使用 PowerShell 的 Active Directory 动态用户组


在管理 Active Directory 域中各种资源的用户访问权限时,管理员可能必须创建动态 AD 用户组。动态组使管理员可以更轻松地授予对文件服务器、共享文件夹、工作站等的权限。此类动态组应根据域中的用户帐户属性自动将用户添加到该组或将其从组中删除。

例如,您希望自动将特定OU中的用户添加到安全组中,或者创建一个包含特定部门(AD用户属性中的部门字段)的所有用户帐户的组等。

本地 Active Directory 没有用于实施动态安全组的内置工具。但是,您可以创建一个 PowerShell 脚本,根据特定条件自动从 Active Directory 中选择用户,并将其添加到现有的 AD 安全组(您可以临时分配成员)或删除不再满足要求的帐户。当任何 AD 用户属性发生更改时,脚本必须自动在组中添加或删除用户。

要使用动态AD组,必须使所有域用户帐户的相关字段保持最新(例如,使用PowerShell脚本创建新用户时,必须立即指定城市、部门、公司等)。

  1. 在 Exchange Server 中,存在根据某些用户条件自动填充的动态通讯组列表(组),例如 AD 中公司/城市字段中的值、用户所属的 OU、邮箱所在的 Exchange 服务器或 Active Directory 中的任何其他用户属性。但是,可以使用动态通讯组来创建通讯组,但不能使用安全组;

  2. Azure AD 中有内置的动态组。在此云目录中,您可以在安全组或 Office 365 组中创建不同的动态成员资格规则。

  3. Windows Server 2012 或更高版本中的动态访问控制 (DAC) 部分可用于替换动态安全组的部分功能。

假设您希望将来自多个 OU 的所有用户自动添加到现有安全组中,这些 OU 在 AD 用户属性的“部门”字段中具有值“销售”。我编写了以下 PowerShell 脚本(要运行它,您需要安装 Active Directory for Windows PowerShell 模块Get-ADUser cmdlet 用于获取用户属性,Add-ADGroupMemberGet-ADGroupMemberRemove-ADGroupMember 是管理 AD 组成员身份的 cmdlet。)

## Your AD domain name
$ADDomain = 'dc=a-d,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
}
}

[玩转系统] 使用 PowerShell 的 Active Directory 动态用户组

运行脚本并确保部门字段中包含“Sales”的指定 OU 中的所有用户均已自动添加到 EastSales 组中。不符合这些条件的用户将从组中删除。

[玩转系统] 使用 PowerShell 的 Active Directory 动态用户组

您必须手动运行该脚本,但最好通过任务计划程序中具有管理 AD 中用户和组权限的帐户下的单独任务定期运行它。 (不建议在域管理员帐户下运行脚本,您应该将 AD 组管理权限委托给普通用户/管理员帐户或 gMSA 帐户。)

您可以使用此 PowerShell 脚本作为您自己在 AD 中创建动态用户组的规则的框架。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯