我想与来自Active Directory中特定OU的用户创建一个动态组。我可以使用Exchange动态分发列表完美地做到这一点,但是,当然,Ex DDL仅用于邮件。
有什么办法可以创建这个吗?我找到了一些使用System Center来处理此问题的指南,但是System Center不是一个选择。
提前致谢,
我想与来自Active Directory中特定OU的用户创建一个动态组。我可以使用Exchange动态分发列表完美地做到这一点,但是,当然,Ex DDL仅用于邮件。
有什么办法可以创建这个吗?我找到了一些使用System Center来处理此问题的指南,但是System Center不是一个选择。
提前致谢,
Answers:
在Active Directory中没有动态安全组,只有动态通讯组。
为此,我认为最可行的选择是让Powershell脚本确定谁在给定的OU中并相应地更新安全组,也许像这样:
Import-Module ActiveDirectory
$groupname = PseudoDynamicGroup
$users = Get-ADUser -Filter * -SearchBase "ou=desiredUsers,dc=domain,dc=tld"
foreach($user in $users)
{
Add-ADGroupMember -Identity $groupname -Member $user.samaccountname -ErrorAction SilentlyContinue
}
$members = Get-ADGroupMember -Identity $groupname
foreach($member in $members)
{
if($member.distinguishedname -notlike "*ou=desiredUsers,dc=domain,dc=tld*")
{
Remove-ADGroupMember -Identity $groupname -Member $member.samaccountname
}
}
我在回答我自己的问题。借助Mathias的PowerShell思想,我已经在互联网上找到了这一点:
https://github.com/davegreen/shadowGroupSync
在作者的博客包含了有关设计和动机为工具的其他信息。
这可以通过Adaxes完成。从技术上讲,一旦用户更新/移动,它将动态更新组成员身份。这是一个示例,该示例说明如何根据Department属性自动维护组成员身份,但是很容易对其进行修改以基于OU进行相同的操作。http://www.adaxes.com/tutorials_AutomatingDailyTasks_AddUsersToGroupsByDepartment.htm
我还寻找了一种在Active Directory中创建动态安全组的方法,并得出了Mathias的结论。我的解决方案不如他的优雅,我使用计划的powershell脚本从组中删除所有用户,然后在OU中填充用户。另外,我确保将子OU组添加到了适合的父OU安全组中。
import-module ActiveDirectory
Get-ADGroupMember OU_GroupName | % { Remove-ADGroupMember 'OU_GroupName' -Members $_ -Confirm:$false}
Get-ADUser -SearchBase 'OU=OUName,OU=ParentOUName,DC=DomainName,DC=TopDomainName' -Searchscope 1 -Filter * | % { Add-ADGroupMember 'OU_GroupName' -Members $_ }
Add-ADGroupMember -Identity "OU_ParentName" -Members "OU_ChildOneName", "OU_ChildTwoName", "OU_ChildThreeName"
不知道这在大型公司中能否很好地扩展,但是脚本在我们的300个用户公司中仅使用了几分钟。
最简单的方法是使用DynamicGroup。 http://www.firstattribute.com/zh_CN/active-directory/ad-automation/dynamic-groups/
从Novell迁移到Active Directory后,我们正在各种环境中运行它。
这是一个自动创建OU组,部门组等的软件。只需创建过滤器就可以了。
对另一位成员留下的声明。如果您不是从域控制器运行此程序,则需要通过替换$ domainController提供一个静态条目,或者可以添加另一个,然后添加$ DomainController并传递该信息。
要将用户添加到组
Function AddUserToGroup($Group, $User, $DomainController)
{
if(!(Get-ADGroupMember -Identity $group | ?{$_.name -eq $User}))
{
Add-ADGroupMember -Identity $group -Members $User -Server $DomainController
}
else
{
return "The user: $User is already in the $group"
}
}
要删除用户,您可以执行相同的操作。
Function RemoveUserFromGroup($Group, $User, $DomainController)
{
if((Get-ADGroupMember -Identity $group | ?{$_.name -eq $User}))
{
Remove-ADGroupMember -Identity $group -Members $User -Server $DomainController
}
else
{
return "The user: $User is not a member of $group"
}
}
现在要使用此功能,您可以执行此操作...
$Users = Get-Aduser -Filter *
Foreach($user in $users)
{
AddUserToGroup "SomeGroup" $user.name "ServerName"
}
要么
最好有一个禁用的用户OU或可能发生这种情况的地方,或者如果您切换OU的站点或组等
$Users = Get-Aduser -Filter *
Foreach($user in $users)
{
RemoveUserToGroup "SomeGroup" $user.name "ServerName"
}