在用户的电子邮件地址中,删除对域

时间:2016-08-22 10:12:45

标签: powershell azure-powershell

在我们的云托管O365租赁中,我想运行一个PowerShell脚本,查看每个用户,并删除对我试图摆脱的电子邮件域的任何引用。

例如,如果我们有以下用户:

Jimbob Goodemails

  • Jimbob.Goodemails@newdomain.com
  • Jimbob.Goodemails@olddomain.com
  • Jimbob.Goodemails@domain.onmicrosoft.com(默认O365域名)

我想从每个用户删除@ olddomain.com地址(在上面的例子中,为Jimbob.Goodemails@olddomain.com)。

在大多数这些帐户中,该域名将设置为别名 - 例如smtp:Jimbob.Goodemails@olddomain.com字段中的proxyAddresses

但是,有些用户(少得多,可能只有3或4个)可能会将其作为主要电子邮件地址(例如SMTP:Jimbob.Goodemails@olddomain.com中的proxyAddresses,也可以作为mailUPN属性)。这些用户可以使用默认的O365电子邮件地址。

我尝试过以下脚本,但无济于事:

foreach($i in Get-Mailbox -ResultSize Unlimited) {
  $i.EmailAddresses |
    ?{$_.AddressString -like '*@olddomain.com'} | %{
      Set-Mailbox $i -EmailAddresses @{remove=$_}
    }
}

它有一段时间,然后似乎完成了,但没有任何改变。

我使用过Active Directory PowerShell脚本为我的AD同步用户执行此操作,因此我主要希望更改云用户和组。

了解如何搜索此类用户也很有用。

1 个答案:

答案 0 :(得分:0)

方法:

创建当前SMTP的数组:

$SMTPs = $Mailbox.EmailAddresses -split ","

删除不需要的SMTP地址:

$SMTPs | ? {$_ -notmatch 'olddomain.com'}

然后使用筛选的SMTP更新邮箱:

Set-Mailbox $Mailbox -EmailAddresses $SMTPs

在您的示例中

foreach ($i in Get-Mailbox -ResultSize Unlimited) 
{
$SMTPs = $i.EmailAddresses -split "," | ? {$_ -notmatch 'olddomain.com'}
Set-Mailbox $i -EmailAddresses $SMTPs
}