我试图删除通讯组的所有成员而不删除该组。我找到了另一个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'
它有效!当我手动输入名称时,它会删除用户。那么我做错了什么?
答案 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个用户进行更新时,它将删除其他所有用户:
使用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环境中的组中使用了此代码。谢谢你的起点,我希望这个贡献可以帮助你的未来读者提出你的问题。