【问题标题】:bulk creation of forwarding addresses and contacts via powershell通过 powershell 批量创建转发地址和联系人
【发布时间】:2016-03-15 06:41:20
【问题描述】:

我正在尝试将邮箱移动到不同 O365 租户上的新 Exchange 服务器。此脚本是此举措的一部分,它尝试列出所有拥有许可证的 Exchange Online 用户,为每个指向其新电子邮件地址的用户创建一个联系人,并将他们的电子邮件转发到他们的新地址和邮箱

#requires -Version 3 -Modules MSOnline
$mailboxlist = Get-Mailbox | Select-Object -Property userprincipalname | 
Get-MsolUser | Where-Object -Property islicensed -EQ -Value $true | 
Select-Object -Property firstname, lastname, userprincipalname | 
Where-Object -Property firstname -NE -Value $null | 
Format-list -AutoSize


#Begin foreach loop
foreach ($item in $mailboxlist)
{
   #Create the forwarding address
   $forwardingaddress = $item.firstname + '.' + $item.lastname + '@newdomain.com'
   #Check for a contact, add if not present
   If (!(Get-MailContact $forwardingaddress -ErrorAction silentlycontinue)){
        New-MailContact $forwardingaddress -ExternalEmailAddress $forwardingaddress
   }
   #assign forwarding address
   set-mailbox -ForwardingAddress $forwardingaddress -DeliverToMailboxAndForward $true

}

上面的结果是一个 $mailboxlist,其中填充了名字和姓氏以及用户 UPN,它也是一个电子邮件地址。 $forwardingaddress 的结果是 .@newdomain.com。

我认为我没有为 foreach 循环正确创建初始数据。我知道如果我用 $_.firstname 替换 $item.firstname 我会得到相同的空结果。如果有了解该主题的人可以提供帮助,我将不胜感激。

谢谢!

编辑:根据 Kiran 的建议进行最终配置

#requires -Version 3 -Modules MSOnline
$mailboxlist = Get-Mailbox |  Get-MsolUser | Where-Object { ($_.islicensed -eq $true) -and ($_.firstname -ne $null) }


#Begin foreach loop
foreach ($item in $mailboxlist)
{
    #Create the forwarding address
    $forwardingaddress = $item.firstname + '.' + $item.lastname + '@newdomain.com'
    #Remove any spaces from the email address
    $forwardingaddress = ($forwardingaddress -replace " ","").trim()
    #Check for a contact, add if not present
    If (!(Get-MailContact $forwardingaddress -ErrorAction silentlycontinue))
    {
        New-MailContact $forwardingaddress -ExternalEmailAddress $forwardingaddress
    }
    #assign forwarding address
    Set-Mailbox -ForwardingAddress $forwardingaddress -DeliverToMailboxAndForward $true
}

【问题讨论】:

    标签: powershell exchange-server office365 powershell-3.0


    【解决方案1】:

    试试这个:

    $mailboxlist = Get-Mailbox |  Get-MsolUser | 
        Where-Object { ($_.islicensed -eq $true) -and ($_.firstname -ne $null) } 
    

    get-MsoluserUserPrincipalName 接受按属性名称输入的管道,因此您只需将 get-mailbox 的输出通过管道传输到 get-msoluser

    select-object 应优先于 format-* 命令,因为创建的对象类型不同。

    当您想在控制台上显示数据时使用format*

    where-object 子句允许您创建复杂的条件,因此请尽量将它们组合起来。这应该是命令的流程:

    cmdlet | where-object { some condition(s)} | select properties
    

    【讨论】:

    • 非常感谢基兰。我创建初始变量的方式当然是问题所在,你的行很好用。以后我将省略不适合查看的变量的格式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 2020-03-26
    • 2017-01-01
    相关资源
    最近更新 更多