【问题标题】:Removing all Members in a Distribution Group删除通讯组中的所有成员
【发布时间】:2020-06-08 21:53:33
【问题描述】:

我正在尝试删除通讯组的所有成员,但暂时不删除该组。我发现了另一个 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
}

但是,它不会删除用户。它对每个尝试删除的用户都这么说...

无法处理参数“成员”的参数转换。无法将值“Smith, John”转换为类型“Microsoft.Exchange.Configuration.Tasks.GeneralRecipientIdParameter”。错误:“无法将哈希表转换为 以下类型的对象:Microsoft.Exchange.Configuration.Tasks.GeneralRecipientIdParameter。受限语言模式或数据部分不支持哈希表到对象的转换。"

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

所以我测试了这个:

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

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

【问题讨论】:

    标签: powershell


    【解决方案1】:

    只是用老式的方法用一个while循环而不是试图在一行中完成。

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

    【讨论】:

      【解决方案2】:

      我知道这有点晚了,但今天试图搞砸它,从 DL 中删除所有用户的最简单方法是在 AD 中使用它。这可能会在某些时候帮助某人:)

      所以代码应该是这样的

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

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

      【讨论】:

        【解决方案3】:

        我知道这是旧的,但有一种有效的方法可以做到这一点。如果要删除分发列表的所有成员,请首先使用单个用户对其进行更新,然后删除该用户。 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 
        

        两步就搞定了

        【讨论】:

          【解决方案4】:

          我知道已经过了一年,但我是这样采用您的起点并稍微改变它来工作的:

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

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

          我刚刚在我的 O365 环境中的一个组中使用了此代码。感谢您的起点,我希望此贡献对您问题的未来读者有所帮助。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-08-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-10-23
            相关资源
            最近更新 更多