在 PowerShell 中清理 DistributionGroup

Cleaning up DistributionGroup in PowerShell

我是 PowerShell 的新手,我正在努力完成以下任务:

我有一个 PS 命令可以使用 Get-ADUser 从 AD 中获取用户,并且它是按部门过滤的。

然后我使用 Get-DistributionGroupMember 从特定的 DistributionGroup 获取另一批用户。

Get-ADuser 输出为:

Get-DistributionGroupMember 输出为:

我想做的是查看通过 Get-ADUser 获得的所有用户是否与 DistributionGroup 成员相同。

如果 Get-ADUser 输出中有不在 DistributionGroup 中的用户,我想将他们添加到组中。因此,在这种情况下,必须使用 Add-DistributionGroupMember.

Frank 添加到 DistributionGroup

我想做的第二件事是从 DistributionGroup 中删除成员,如果他们在组中但不在 Get-ADUser 输出中。因此,在这种情况下,Robert & Ryan 必须使用 Remove-DistributionGroupMember.

从 DistributionGroup 中删除

我正在考虑清空 DistributionGroup 并用 Get-ADUser 命令中的数据重新填充它,但是应该有更好的方法来完成上述场景而不必实际清除 DistributionGroup 对吗?我不想冒险让人们在我的脚本清除它时使用 DistributionGroup。

这是我用来清除组并重新填充它的方法:

Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn

$users = Get-ADUser -Filter * -Properties Department | Where-Object {$_.Department -eq "ICT"} | Select-Object sAMAccountName
$group = "DG_ICT"

Get-DistributionGroupMember $group | Remove-DistributionGroupMember $group -Confirm:$False

foreach($u in $users) { Add-DistributionGroupMember -Identity $group -Member $u.sAMAccountName }

我只是不太了解 PowerShell atm,无法想出在不清空组的情况下执行此操作的正确方法,因此非常感谢任何帮助...

谢谢!

我的方法是利用 Compare-Object

在通讯组中添加和删除成员时,不需要进行交换。您可以通过 AD 控制成员资格。

下面的例子应该能让你开始正确的方向:

#get users
$users = Get-ADUser -Filter {Darpartment -like "*"}
#get group object
$group = Get-ADGroup -Filter {Name -eq ".TEST Group"} -Properties Members

#compare by DN
$compare = Compare-Object $users.distinguishedName $group.members

#users not in group
$notInGroup = ($compare | Where-Object {$_.SideIndicator -eq "<="}).InputObject 
#users in group
$notInGetAD = ($compare | Where-Object {$_.SideIndicator -eq "=>"}).InputObject

#Add to group -- only if true
if($notInGroup)
{
    $group | Add-ADGroupMember -Members $notInGroup -Confirm:$false
}
#remove from group -- only if true
if($notInGetAD)
{

    $group | Remove-ADGroupMember -Members $notInGetAD -Confirm:$false
}