清理 PowerShell 中的通讯组



我对PowerShell相当陌生,我正在尝试完成以下任务:

我有一个PS命令,使用Get-ADUser从AD获取用户,并在部门中过滤。

然后,我使用Get-DistributionGroupMember从特定通讯组获取另一批用户。

Get-ADuser输出为:

  • John
  • 琳 达
  • 戴夫
  • 弗兰克

Get-DistributionGroupMember输出为:

  • John
  • 琳 达
  • 戴夫
  • 罗伯特
  • 莱恩

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

如果Get-ADUser输出中有不在通讯组中的用户,我希望将其添加到通讯组中。因此,在这种情况下,必须使用Add-DistributionGroupMemberFrank添加到通讯组。

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

我正在考虑清空通讯组并用Get-ADUser命令中的数据重新填充它,但应该有更好的方法来完成上述方案,而无需实际清除通讯组对吗?我不想冒着人们在我的脚本清除通讯组时使用通讯组的风险。

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

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
}

相关内容

  • 没有找到相关文章

最新更新