定位两个 OU 中的所有用户并删除通讯组列表



希望在这里得到一点帮助 - 我环顾了网站,但没有看到这样的东西(如果有的话,请指导我(。

>

我需要将新的步骤合并到我们的用户卸货过程中,这将使它们从任何广告发行列表中删除。我想将其设置为一个计划的任务,每晚一次运行一次,以发现可以找到灭活的用户帐户的两个OU。

我想通过将其指向用户而不是发行版列表的OU来运行此操作,因为我怀疑我们最终也会得到请求将这些用户从其他类型的组中删除的请求。<<<<<<<<<<<<<<<<

此片段将从单个用户中删除广告发行列表,但仅保留所有其他类型的广告组:

#  GroupCategory 0 = Distro List
#  GroupCategory 1 = Security Group
#  GroupScope 0 = DomainLocal
#  GroupScope 1 = Global
#  GroupScope 2 = Universal 
$user = "userlogon"
Get-ADPrincipalGroupMembership -Identity $user|
Where {$_.GroupCategory -eq 0} |
ForEach {Remove-ADPrincipalGroupMembership -Identity $user -MemberOf $_ -Confirm:$false} 

此片段将查看OU并返回一些信息(我是使用-searchbase变量的示例(:

$OUs = 'OU=PendingDeletion,OU=Users,DC=Stuff,DC=Place,DC=net','OU=HoldForReview,OU=Users,DC=Stuff,DC=Place,DC=net'

$OU | ForEach {Get-ADGroup -Filter * -Properties ManagedBy -SearchBase $_ } |
 Select Name, ManagedBy |
 Sort -Property Name
 Out-GridView 

但是 - 为了完成我的目标,我会做这样的事情吗?我在这里有点不深度,对重写的任何建议都值得赞赏:

$OUs = 'OU=PendingDeletion,OU=Users,DC=Stuff,DC=Place,DC=net','OU=HoldForReview,OU=Users,DC=Stuff,DC=Place,DC=net'
 $user = "*"
$OUs | ForEach {
        Get-ADPrincipalGroupMembership -Identity $user|
        Where {$_.GroupCategory -eq 0} |
        ForEach {Remove-ADPrincipalGroupMembership -Identity $user -MemberOf $_ -Confirm:$false}
              } 

总是有几种在豪华的方法,所以我敢肯定,做同样的事情的方法较小。如果有人有不同的方法,请随时提出替代方案。

感谢您看看!

,因此听起来您需要三个循环。

首先,您需要循环浏览OU列表以获取用户。我们将用户对象存储在$Users

$OUs = 'OU=PendingDeletion,OU=Users,DC=Stuff,DC=Place,DC=net','OU=HoldForReview,OU=Users,DC=Stuff,DC=Place,DC=net'
$Users = ForEach ($OU in $OUs) {
    Get-ADUser -Filter * -SearchBase $OU 
}

在用户上的下一个循环以获取要删除的组。然后循环逐渐删除每个组。

ForEach ($User in $Users) {
    Get-ADPrincipalGroupMembership -Identity $user |
    Where-Object {$_.GroupCategory -eq 0} |
    ForEach-Object {
        Remove-ADPrincipalGroupMembership -Identity $user -MemberOf $_
    }
} 

我认为,通过获得所有用户的组成员资格,然后按AD组进行分组,并以这种方式处理每个组,我认为我会以不同的方式采取这种情况。似乎会少很多电话。因此,我会像Benh一样开始获取所有用户,除了我将包括他们的会员属性。然后,我将建立一个潜在组的列表,然后仅过滤到分发列表。我将其作为钥匙进行标签,并使该组中每个用户的值成为数组。然后循环循环从关联键中删除每个值的值。

$OUs = 'OU=PendingDeletion,OU=Users,DC=Stuff,DC=Place,DC=net','OU=HoldForReview,OU=Users,DC=Stuff,DC=Place,DC=net'
$Users = ForEach ($OU in $OUs) {
    Get-ADUser -Filter * -SearchBase $OU -Properties MemberOf
}
$UsersByGroup = @{}
ForEach($Group in ($Users.MemberOf | Select -Unique | Get-ADGroup | Where{ $_.GroupCategory -eq 0 })) {
    $UsersByGroup.Add($Group.DistinguishedName,($Users | Where{ $Group.DistinguishedName -in $_.MemberOf}))
}
$UsersByGroup.Keys | ForEach{
    Remove-ADGroupMember -Identity $_ -Members $UsersByGroup[$_] -Confirm:$false
}

最新更新