通过 powershell 批量创建转发地址和联系人
bulk creation of forwarding addresses and contacts via powershell
我正在尝试将邮箱移动到不同 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
}
试试这个:
$mailboxlist = Get-Mailbox | Get-MsolUser |
Where-Object { ($_.islicensed -eq $true) -and ($_.firstname -ne $null) }
get-Msoluser
的 UserPrincipalName
接受属性名称的管道输入,因此您应该将 get-mailbox
的输出通过管道传输到 get-msoluser
select-object
应优先于 format-*
命令,因为创建的对象类型。
如果要在控制台上显示数据,请使用 format*
。
where-object
子句允许您创建复杂的条件,因此请尽量将它们结合起来。这应该是命令的流程:
cmdlet | where-object { some condition(s)} | select properties
我正在尝试将邮箱移动到不同 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
}
试试这个:
$mailboxlist = Get-Mailbox | Get-MsolUser |
Where-Object { ($_.islicensed -eq $true) -and ($_.firstname -ne $null) }
get-Msoluser
的 UserPrincipalName
接受属性名称的管道输入,因此您应该将 get-mailbox
的输出通过管道传输到 get-msoluser
select-object
应优先于 format-*
命令,因为创建的对象类型。
如果要在控制台上显示数据,请使用 format*
。
where-object
子句允许您创建复杂的条件,因此请尽量将它们结合起来。这应该是命令的流程:
cmdlet | where-object { some condition(s)} | select properties