删除通讯组中的所有成员

时间:2016-07-20 14:41:00

标签: powershell

我试图删除通讯组的所有成员而不删除该组。我找到了另一个stackoverflow帖子,这似乎可以解决这个问题:

foreach ($member in Get-DistributionGroupMember -Identity Auto.test@company.com) 
{
  write-host $member
  Remove-DistributionGroupMember -Identity Auto.test@company.com -Member $member -Confirm:$False
}

但是,它不会删除用户。它为每个尝试删除的用户说明了这一点......

无法处理参数'会员'的参数转换。无法转换价值"史密斯,约翰"键入" Microsoft.Exchange.Configuration.Tasks.GeneralRecipientIdParameter"。错误:"无法将哈希表转换为 以下类型的对象:Microsoft.Exchange.Configuration.Tasks.GeneralRecipientIdParameter。受限语言模式或数据部分不支持Hashtable-to-Object转换。"

我认为' name'将是一个属性remove-distributiongroupmember将采取,但它似乎不想在这里。

所以我测试了这个:

Remove-DistributionGroupMember -Identity Auto.Test@company.com -Member 'Smith, John'

它有效!当我手动输入名称时,它会删除用户。那么我做错了什么?

4 个答案:

答案 0 :(得分:1)

用一个循环循环而不是试图在一行中做旧的方式。

$list = Get-DistributionGroupMember -Identity $DistributionGroup
$list | % {
   Remove-DistributionGroupMember -Identity $DistributionGroup -Member $_.Name -Confirm:$false
   } 

答案 1 :(得分:1)

我知道现在有点晚了,但是今天要尝试弄乱它,从DL中删除所有用户的最简单的可能性就是在AD中使用它。这可能会在某个时候帮助某人:)

因此代码应类似于

Get-adgroup -identity $_.groupname -server "Domain" -properties *
Set-adgroup -identity $_.groupname -server "Domain" -Clear member

使用AD:D中的属性更容易

答案 2 :(得分:1)

我知道这已经很老了-但是有一种有效的方法可以做到这一点。如果要删除通讯组列表的所有成员,请先用一个用户更新它,然后删除该用户。 Update-DistributionGroupMember cmdlet可以解决问题,当您使用1个用户进行更新时,它将删除其他所有用户:

来自https://docs.microsoft.com/en-us/powershell/module/exchange/update-distributiongroupmember?view=exchange-ps

使用Update-DistributionGroupMember cmdlet替换所有成员 通讯组和启用邮件的安全组。

Update-DistributionGroupMember -Identity $groupname -Confirm:$false -Members myownuser@domain.com    
Remove-DistributionGroupMember -Identity $groupname -Confirm:$false -Member myownuser@domain.com 

2步就完成了

答案 3 :(得分:0)

我知道这是一年之后,但这是我采取你的起点并稍微改变它的方式:

foreach ($member in (Get-DistributionGroupMember -Identity $groupname)) {
    Write-Host $member.primarySmtpAddress
    Remove-DistributionGroupMember -Identity $groupname -Member $member.PrimarySmtpAddress -Confirm:$false
}

它是一个foreach循环,遍历组的每个成员,然后从同一组中删除用户,但它使用主电子邮件地址,而不是成员对象,这可能是您被卡住的地方。您可以使用Name而不是PrimarySmtpAddress属性,但我认为电子邮件地址更具可读性。

我刚刚在O365环境中的组中使用了此代码。谢谢你的起点,我希望这个贡献可以帮助你的未来读者提出你的问题。