Powershell Shadow Groups - 不一致的团体会员资格

时间:2016-12-01 21:16:29

标签: powershell active-directory

我正在使用Powershell维护多个影子组(一组镜像特定OU中的所有用户。)

我有三个OU,员工,教师和管理。每个人都有一个与之相关的组,其中工作人员组包含所有三个组。

以下是代码:

$server="win-ad1.example.com"

#Staff
$AdministrationOU="OU=Administration,OU=Accounts,DC=example,DC=com"
$FacultyOU="OU=Faculty,OU=Accounts,DC=example,DC=com"
$StaffOU="OU=Staff,OU=Accounts,DC=example,DC=com"

$ShadowGroup="CN=Staff,OU=User Groups,OU=Accounts,DC=example,DC=com"
Get-ADGroupMember -Server $server  –Identity $ShadowGroup `
    | Where-Object {($_.distinguishedName –NotMatch $AdministrationOU) `
    -OR ($_.distinguishedName –NotMatch $FacultyOU) `
    -OR ($_.distinguishedName –NotMatch $StaffOU)} `
    | ForEach-Object {Remove-ADPrincipalGroupMembership -Server $server  –Identity $_ –MemberOf $ShadowGroup –Confirm:$false}
Sleep -Seconds 2
Get-ADUser -Server $server  –SearchBase $AdministrationOU –SearchScope OneLevel –LDAPFilter "(!(memberOf=$ShadowGroup))" `
    | ForEach-Object {Add-ADPrincipalGroupMembership -Server $server  –Identity $_ –MemberOf $ShadowGroup}
Get-ADUser -Server $server  –SearchBase $FacultyOU –SearchScope OneLevel –LDAPFilter "(!(memberOf=$ShadowGroup))" `
    | ForEach-Object {Add-ADPrincipalGroupMembership -Server $server  –Identity $_ –MemberOf $ShadowGroup}
Get-ADUser -Server $server  –SearchBase $StaffOU –SearchScope OneLevel –LDAPFilter "(!(memberOf=$ShadowGroup))" `
    | ForEach-Object {Add-ADPrincipalGroupMembership -Server $server  –Identity $_ –MemberOf $ShadowGroup}


#Administration
$ShadowGroup="CN=Administration,OU=User Groups,OU=Accounts,DC=example,DC=com"
Get-ADGroupMember -Server $server  –Identity $ShadowGroup  `
    | Where-Object {$_.distinguishedName –NotMatch $AdministrationOU} `
    | ForEach-Object {Remove-ADPrincipalGroupMembership -Server $server  –Identity $_ –MemberOf $ShadowGroup –Confirm:$false}
Sleep -Seconds 2
Get-ADUser -Server $server  –SearchBase $AdministrationOU –SearchScope OneLevel –LDAPFilter "(!(memberOf=$ShadowGroup))" `
    | ForEach-Object {Add-ADPrincipalGroupMembership -Server $server  –Identity $_ –MemberOf $ShadowGroup}
Get-ADGroupMember -Server $server  –Identity $ShadowGroup `
    | Enable-ADAccount -Server $server

....
#same code for Faculty

这是(我认为)非常标准的代码,但我承认写的很少PowerShell。代码应删除组中不在OU中的所有用户,然后将OU中的所有用户(不在组中)添加到组中。

理论上,这很有效,但实际上,向Staff组添加/删除用户可能会出现严重错误。在脚本的一次运行中,它会突然从组中删除大量(随机)用户,尽管它们显然位于其中一个OU中。再次运行脚本可能会将其添加回去或​​取出其他用户。很多时候脚本运行得很好。

我最初将它用于与不同域控制器通信的脚本,因此我在每个Active Directory调用中添加了-Server参数,以便每次都能访问相同的(主)域控制器。问题仍然存在,在我的所有搜索中,我找不到任何有同样问题的人(可能是因为我不确定如何说出正在发生的事情。)

任何帮助都将不胜感激。

注意,这里的比例是OU的大小:

工作人员:199

学院:194

行政管理:32

0 个答案:

没有答案