使用 PowerShell 将别名地址更改为主 SMTP 地址

Jacki

您已拥有每个邮箱集的主 SMTP 地址和别名地址。但是,任务是将别名地址与主 SMTP 地址交换。执行此操作的最佳方法是使用 PowerShell。在本文中,您将了解如何使用 PowerShell 将别名地址更改为 Exchange Server 中的主 SMTP 地址。

介绍

Set-PrimaryAddress.ps1 PowerShell 脚本适用于:

  • 本地交换
  • 交换混合

如果您想对 Exchange Online (Microsoft 365) 环境执行相同的操作,请阅读文章使用 PowerShell 将 Microsoft 365 别名地址更改为主 SMTP 地址。

笔记:别名 smtp 地址成为主 SMTP 地址,主 SMTP 地址将成为别名地址。所以主SMTP地址不会被删除;它只是与别名 smtp 地址进行交换。

开始之前

如果没有为每个邮箱设置别名地址怎么办?最好是阅读使用 PowerShell 批量添加辅助 SMTP 地址一文。

验证是否为所有邮箱设置了别名地址后,运行本文中的 Set-PrimaryAddress.ps1 PowerShell 脚本以将别名地址与主 SMTP 地址交换。

假设您已完成并想要删除现在是别名地址的旧主 SMTP 地址,您可以阅读使用 PowerShell 批量删除辅助 SMTP 地址一文。

分阶段执行此操作总是比使用一个脚本立即完成所有操作要好,这样您就可以确保所有设置都正确无误。

下载 Set-PrimaryAddress.ps1 PowerShell 脚本或将以下代码复制并粘贴到记事本中。给它起个名字设置主地址.ps1并将其放置在C:脚本文件夹。创建一个脚本文件夹(如果没有)。

<#
    .SYNOPSIS
    Set-PrimaryAddress.ps1

    .DESCRIPTION
    Get the secondary (alias) address from a specified domain and set it as the primary SMTP address
    for all mailbox users in Exchange Server and Exchange Hybrid. If there is no alias address
    set with the specified domain, it will skip the user and display a message. The primary SMTP address
    will become an alias address and all the secondary email address will remain.

    .LINK
    www.alitajran.com/change-alias-address-to-primary-smtp-address/

    .NOTES
    Written by: ALI TAJRAN
    Website:    alitajran.com
    X:          x.com/alitajran
    LinkedIn:   linkedin.com/in/alitajran

    .CHANGELOG
    V1.00, 06/04/2024 - Initial version
    V1.10, 09/03/2024 - Added parameters
#>

param (
    [Parameter(Mandatory = $true)]
    [string]$DomainName,
    [switch]$WhatIf,
    [switch]$Remote
)

# Output will be added to C:temp folder. Open the log with a text editor.
Start-Transcript -Path C:tempSet-Primary-SMTP-Address.log -Append

# Ensure the domain starts with '@'
$PrimarySMTPDomain = "@" + $DomainName

# Choose the appropriate cmdlets based on the switch
if ($Remote) {
    $GetMailboxCmdlet = "Get-RemoteMailbox"
    $SetMailboxCmdlet = "Set-RemoteMailbox"
}
else {
    $GetMailboxCmdlet = "Get-Mailbox"
    $SetMailboxCmdlet = "Set-Mailbox"
}

# Get all mailbox users
$users = Invoke-Expression "$GetMailboxCmdlet -ResultSize Unlimited"

foreach ($user in $users) {
    $currentPrimarySMTP = $user.PrimarySmtpAddress.ToString()
    $aliasAddresses = $user.EmailAddresses | Where-Object { $_ -clike "smtp*" -and $_ -clike "*$PrimarySMTPDomain" }

    # Check if the current primary SMTP address ends with the specified domain
    if ($currentPrimarySMTP -like "*$PrimarySMTPDomain") {
        Write-Host "Skipping $($user.DisplayName) - Primary SMTP already ends with $PrimarySMTPDomain" -ForegroundColor Yellow
    }
    elseif ($aliasAddresses.Count -eq 1) {
        $newPrimarySMTP = $aliasAddresses -replace "smtp:", ""
        Write-Host "Updating primary SMTP for $($user.DisplayName) to $newPrimarySMTP" -ForegroundColor Green

        # Set the new primary SMTP address
        if ($WhatIf) {
            Invoke-Expression "$SetMailboxCmdlet -Identity '$($user.Identity)' -PrimarySmtpAddress '$newPrimarySMTP' -EmailAddressPolicyEnabled `$false -WhatIf"
        }
        else {
            Invoke-Expression "$SetMailboxCmdlet -Identity '$($user.Identity)' -PrimarySmtpAddress '$newPrimarySMTP' -EmailAddressPolicyEnabled `$false"
        }
    }
    elseif ($aliasAddresses.Count -eq 0) {
        Write-Host "No alias address found for $($user.DisplayName) - Primary SMTP not updated" -ForegroundColor Cyan
    }
    else {
        Write-Host "Multiple alias addresses found for $($user.DisplayName) - Primary SMTP not updated" -ForegroundColor Red
    }
}

Stop-Transcript

批量设置主 SMTP 地址 PowerShell 脚本

该脚本适用于 Exchange 本地和 Exchange 混合环境。您必须以管理员身份运行 Exchange 命令行管理程序。

转到脚本路径并运行 Set-PrimaryAddress.ps1 脚本。该脚本将遍历 Exchange 组织中的所有邮箱。

C:scripts.Set-PrimaryAddress.ps1 -DomainName "exoip.nl" -WhatIf

假设您想要将 Exchange 混合环境中的云邮箱作为目标,您需要添加-偏僻的范围。这将从 Get-Mailbox 更改为 Get-RemoteMailbox 以检索所有云邮箱,并且 Set-Mailbox 将从更改为 Set-RemoteMailbox 以将更改应用到云邮箱。

C:scripts.Set-PrimaryAddress.ps1 -DomainName "exoip.nl" -Remote -WhatIf

笔记:有一个-如果什么参数进行空运行,这样就不会发生任何事情,并且如果一切看起来都符合您的要求,您可以仔细检查 PowerShell 输出。一旦一切看起来都不错,删除-如果什么参数并重新运行脚本。

了解更多:在 Exchange 中使用 PowerShell 获取所有 SMTP(电子邮件)地址

C:scripts.Set-PrimaryAddress.ps1 -DomainName "exoip.nl"

如果邮箱存在多个别名地址,它将不会应用任何更改,并且输出将显示该信息,以便您可以查看它。

在此示例中,域为 @exoip.nl 的现有别名地址将被批量设置为主 SMTP 地址。

Transcript started, output file is C:tempSet-Primary-SMTP-Address.log
Multiple alias addresses found for Alysia Maverick - Primary SMTP not updated
No alias address found for Boris Campbell - Primary SMTP not updated
Updating primary SMTP for  Christopher Payne to [email protected]
No alias address found for Discovery Search Mailbox - Primary SMTP not updated
Updating primary SMTP for  James Paterson to [email protected]
No alias address found for Fraser, Max - Primary SMTP not updated
Updating primary SMTP for Nicholas Murray to [email protected]
No alias address found for Richard Hunter - Primary SMTP not updated
No alias address found for sharedmailboxonprem - Primary SMTP not updated
Transcript stopped, output file is C:tempSet-Primary-SMTP-Address.log

现有的 SMTP 别名地址现在是所有用户的主要 SMTP 地址。

结论

您了解了如何使用 PowerShell 将别名地址批量设置为主 SMTP 地址。首先,下载 Set-PrimaryAddress PowerShell 脚本。然后,在命令中添加您希望其在邮箱别名地址中搜索的域。最后,运行脚本。请记住首先使用 -WhatIf 参数进行测试。

您喜欢这篇文章吗?您可能还喜欢创建具有相同别名的共享邮箱。不要忘记关注我们并分享这篇文章。