Azure 中的 Exchange 開發/測試環境
本主題會逐步引導您在 Microsoft Azure 中建立 Exchange 2016 或 Exchange 2019 開發/測試部署。 以下是所產生的組態。
此組態是由單一 Exchange 伺服器和 Azure 虛擬網路子網中的 Windows Server Active Directory (AD) 網域控制站所組成。 這提供基礎和常見的起點,您可以從中示範 Exchange 並開發Exchange Server應用程式。 此設定僅適用于 Exchange 伺服器上的內部電子郵件和應用程式測試。 未設定外部電子郵件流程。
設定此開發/測試環境有三個主要階段︰
- 設定虛擬網路和網域控制站 (adVM)。
- 新增 exchange server (exVM) 。
- 設定 Exchange。
如果您還沒有 Azure 訂用帳戶,您可以註冊 Azure 免費試用版。 如果您有 MSDN 或 Visual Studio 訂用帳戶,請參閱 Visual Studio 訂閱者的每月 Azure 點數。
注意事項
因為 Exchange 會在 Windows Server AD 中變更架構,所以此設定無法使用 Microsoft Entra Domain Services。
階段 1:部署虛擬網路和網域控制站
您可以使用具有Azure PowerShell的網域控制站來建立新的 Azure 虛擬網路。 您可以從Windows PowerShell命令提示字元或在 PowerShell 整合式腳本環境 (ISE) 中執行下列 PowerShell 命令。 如果您尚未安裝 Azure PowerShell,請參閱開始使用 Azure PowerShell Cmdlet。
注意事項
這些命令適用于 Azure PowerShell 1.0.0 和更新版本。
登入您的 Azure 帳戶。
Connect-AzAccount
使用下列命令取得訂用帳戶名稱。
Get-AZSubscription | Sort-Object Name | Select-Object Name
使用下列命令設定您的 Azure 訂用帳戶。 以正確的名稱取代引號內的所有專案,包括 < 和 > 字元,以設定$subscrName變數。
$subscrName="<subscription name>" Select-AzSubscription -SubscriptionName $subscrName
建立新的資源群組。 若要判斷資源群組名稱是否是唯一的,可使用此命令來列出現有的資源群組。
Get-AZResourceGroup | Sort-Object ResourceGroupName | Select-Object ResourceGroupName
使用這些命令建立新的資源群組。 以正確的名稱取代引號內的所有項目 (包括 < 和 > 字元),藉此設定變數。
$rgName="<resource group name>" $locName="<location name, such as West US>" New-AZResourceGroup -Name $rgName -Location $locName
Resource Manager 架構的虛擬機器會需要 Resource Manager 架構的儲存體帳戶。 您必須為儲存體帳戶挑選 只包含小寫字母和數位的全域唯一名稱。 您可以使用此命令來列出現有的儲存體帳戶。
Get-AZStorageAccount | Sort-Object StorageAccountName | Select-Object StorageAccountName
使用此命令來測試建議的儲存體帳戶名稱是否是唯一的。
Get-AZStorageAccountNameAvailability "<proposed name>"
使用這些命令為新的測試環境建立新的儲存體帳戶。
$saName = "<storage account name>" New-AZStorageAccount -Name $saName -ResourceGroupName $rgName -Type Standard_LRS -Location $locName
建立將裝載 EXSrvrSubnet 子網的 EXSrvrVnet Azure 虛擬網路,並使用網路安全性群組來保護它。
$exSubnet=New-AZVirtualNetworkSubnetConfig -Name EXSrvrSubnet -AddressPrefix 10.0.0.0/24 New-AZVirtualNetwork -Name EXSrvrVnet -ResourceGroupName $rgName -Location $locName -AddressPrefix 10.0.0.0/16 -Subnet $exSubnet -DNSServer 10.0.0.4 $rule1 = New-AZNetworkSecurityRuleConfig -Name "RDPTraffic" -Description "Allow RDP to all VMs on the subnet" -Access Allow -Protocol Tcp -Direction Inbound -Priority 100 -SourceAddressPrefix Internet -SourcePortRange * -DestinationAddressPrefix * -DestinationPortRange 3389 $rule2 = New-AZNetworkSecurityRuleConfig -Name "ExchangeSecureWebTraffic" -Description "Allow HTTPS to the Exchange server" -Access Allow -Protocol Tcp -Direction Inbound -Priority 101 -SourceAddressPrefix Internet -SourcePortRange * -DestinationAddressPrefix "10.0.0.5/32" -DestinationPortRange 443 New-AZNetworkSecurityGroup -Name EXSrvrSubnet -ResourceGroupName $rgName -Location $locName -SecurityRules $rule1, $rule2 $vnet=Get-AZVirtualNetwork -ResourceGroupName $rgName -Name EXSrvrVnet $nsg=Get-AZNetworkSecurityGroup -Name EXSrvrSubnet -ResourceGroupName $rgName Set-AZVirtualNetworkSubnetConfig -VirtualNetwork $vnet -Name EXSrvrSubnet -AddressPrefix "10.0.0.0/24" -NetworkSecurityGroup $nsg $vnet | Set-AzVirtualNetwork
在 Azure 中建立 adVM 虛擬機器。 adVM 是 corp.contoso.com Windows Server AD網域的網域控制站,以及 EXSrvrVnet 虛擬網路虛擬機器的 DNS 伺服器。
首先,填寫資源群組、Azure 位置和儲存體帳戶名稱的名稱,然後在本機電腦上的Azure PowerShell命令提示字元執行這些命令,以建立 adVM 的 Azure 虛擬機器。
# Create an availability set for domain controller virtual machines New-AZAvailabilitySet -ResourceGroupName $rgName -Name dcAvailabilitySet -Location $locName -Sku Aligned -PlatformUpdateDomainCount 5 -PlatformFaultDomainCount 2 # Create the domain controller virtual machine $vnet = Get-AZVirtualNetwork -Name EXSrvrVnet -ResourceGroupName $rgName $pip = New-AZPublicIpAddress -Name adVM-NIC -ResourceGroupName $rgName -Location $locName -AllocationMethod Dynamic $nic = New-AZNetworkInterface -Name adVM-NIC -ResourceGroupName $rgName -Location $locName -SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $pip.Id -PrivateIpAddress 10.0.0.4 $avSet=Get-AZAvailabilitySet -Name dcAvailabilitySet -ResourceGroupName $rgName $vm=New-AZVMConfig -VMName adVM -VMSize Standard_D1_v2 -AvailabilitySetId $avSet.Id $vm=Set-AZVMOSDisk -VM $vm -Name adVM-OS -DiskSizeInGB 128 -CreateOption FromImage -StorageAccountType "Standard_LRS" $diskConfig=New-AZDiskConfig -AccountType "Standard_LRS" -Location $locName -CreateOption Empty -DiskSizeGB 20 $dataDisk1=New-AZDisk -DiskName adVM-DataDisk1 -Disk $diskConfig -ResourceGroupName $rgName $vm=Add-AZVMDataDisk -VM $vm -Name adVM-DataDisk1 -CreateOption Attach -ManagedDiskId $dataDisk1.Id -Lun 1 $cred=Get-Credential -Message "Type the name and password of the local administrator account for adVM." $vm=Set-AZVMOperatingSystem -VM $vm -Windows -ComputerName adVM -Credential $cred -ProvisionVMAgent -EnableAutoUpdate $vm=Set-AZVMSourceImage -VM $vm -PublisherName MicrosoftWindowsServer -Offer WindowsServer -Skus 2012-R2-Datacenter -Version "latest" $vm=Add-AZVMNetworkInterface -VM $vm -Id $nic.Id New-AZVM -ResourceGroupName $rgName -Location $locName -VM $vm
系統會提示您輸入使用者名稱和密碼。 本文會將此使用者名稱稱為ADMIN_NAME。 使用強式密碼,並將兩者記錄於安全的位置。
注意:您指定的密碼不能是 「pass@word1」。 它必須是 8-123 個字元長,而且必須至少滿足下列 3 個密碼複雜性需求:
- 包含大寫字母
- 包含小寫字母
- 包含數字
- 包含特殊字元
Azure 可能需要數分鐘的時間來建置虛擬機器。
使用本機系統管理員帳號憑證連線到網域控制站虛擬機器
在Azure 入口網站中,按一下資源組名 >> adVM Connect 的 [資源群組 <> ]。 >
執行所下載的 adVM.rdp 檔案,然後按一下 [ 連線]。
在 [ Windows 安全性] 中,按一下 [ 使用另一個帳戶]。 在 [使用者名稱]中,輸入 **adVM** < ADMIN_NAME > 。
在 [密碼] 中,輸入 ADMIN_NAME 帳戶的密碼,然後按一下 [確定]。
出現提示時,按一下 [是]。
在 adVM 的系統管理員層級Windows PowerShell命令提示字元使用下列命令,將額外的資料磁片新增為具有磁碟機號 F: 的新磁片區。
$disk=Get-Disk | where {$_.PartitionStyle -eq "RAW"} $diskNumber=$disk.Number Initialize-Disk -Number $diskNumber New-Partition -DiskNumber $diskNumber -UseMaximumSize -AssignDriveLetter Format-Volume -DriveLetter F
將 adVM 設定為 corp.contoso.com 網域的網域控制站和 DNS 伺服器。 在 adVM 上的系統管理員層級 Windows PowerShell 命令提示字元執行下列命令︰
Install-WindowsFeature AD-Domain-Services -IncludeManagementTools Install-ADDSForest -DomainName corp.contoso.com -DatabasePath "F:\NTDS" -SysvolPath "F:\SYSVOL" -LogPath "F:\Logs"
請注意,這些命令可能需要數分鐘才能完成。
adVM 重新啟動後,重新連線到 adVM 虛擬機器。
使用網域認證連線到網域控制站虛擬機器
在Azure 入口網站中,按一下 [資源群組 >< ] 作為新資源群組 >> adVM > Connect的名稱。
執行所下載的 adVM.rdp 檔案,然後按一下 [ 連線]。
在 [ Windows 安全性] 中,按一下 [ 使用另一個帳戶]。 在 [使用者名稱]中,輸入 **CORP** < ADMIN_NAME > 。
在 [密碼] 中,輸入 ADMIN_NAME 帳戶的密碼,然後按一下 [確定]。
出現提示時,按一下 [是]。
從桌面開啟系統管理員層級Windows PowerShell命令提示字元,然後執行下列命令:
Add-WindowsFeature RSAT-ADDS-Tools
以下是階段 1 的結果。
階段 2:建立 Exchange 虛擬機器
在此階段中,您會在 EXSrvrVNet 虛擬網路中建立 Exchange 虛擬機器,並使其成為 CORP 網域的成員。
若要使用 Azure PowerShell 建立 Exchange 虛擬機器,請先使用您的 Azure 帳戶從Windows PowerShell命令提示字元登入 Azure, (視需要) 。
Connect-AzAccount
您必須判斷 exVM 虛擬機器的全域唯一 DNS 名稱。 您必須挑選 只包含小寫字母和數位的全域唯一 DNS 名稱。 您可以使用下列 PowerShell 命令來執行此動作:
$vmDNSName="<DNS name to test>"
$rgName="<resource group name>"
$locName=(Get-AZResourceGroup -Name $rgName).Location
Test-AZDnsAvailability -DomainQualifiedName $vmDNSName -Location $locName
如果您看到 「True」,則建議的名稱是全域唯一的。
接下來,在 PowerShell 提示字元中填入變數值並執行產生的區塊。
# Set up key variables
$subscrName="<name of your Azure subscription>"
$vmDNSName="<unique, public DNS name for the Exchange server>"
# Set the Azure subscription
Select-AzSubscription -SubscriptionName $subscrName
# Get the Azure location and storage account names
$locName=(Get-AZResourceGroup -Name $rgName).Location
$saName=(Get-AZStorageaccount | Where {$_.ResourceGroupName -eq $rgName}).StorageAccountName
# Create an availability set for Exchange virtual machines
New-AZAvailabilitySet -ResourceGroupName $rgName -Name exAvailabilitySet -Location $locName -Sku Aligned -PlatformUpdateDomainCount 5 -PlatformFaultDomainCount 2
# Specify the virtual machine name and size
$vmName="exVM"
$vmSize="standard_d8s_v3"
$vnet=Get-AZVirtualNetwork -Name "EXSrvrVnet" -ResourceGroupName $rgName
$avSet=Get-AZAvailabilitySet -Name exAvailabilitySet -ResourceGroupName $rgName
$vm=New-AZVMConfig -VMName $vmName -VMSize $vmSize -AvailabilitySetId $avSet.Id
# Create the NIC for the virtual machine
$nicName=$vmName + "-NIC"
$pipName=$vmName + "-PublicIP"
$pip=New-AZPublicIpAddress -Name $pipName -ResourceGroupName $rgName -DomainNameLabel $vmDNSName -Location $locName -AllocationMethod Dynamic
$nic=New-AZNetworkInterface -Name $nicName -ResourceGroupName $rgName -Location $locName -SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $pip.Id -PrivateIpAddress "10.0.0.5"
# Create and configure the virtual machine
$cred=Get-Credential -Message "Type the name and password of the local administrator account for exVM."
$vm=Set-AZVMOSDisk -VM $vm -Name ($vmName +"-OS") -DiskSizeInGB 128 -CreateOption FromImage -StorageAccountType "Standard_LRS"
$vm=Set-AZVMOperatingSystem -VM $vm -Windows -ComputerName $vmName -Credential $cred -ProvisionVMAgent -EnableAutoUpdate
$vm=Set-AZVMSourceImage -VM $vm -PublisherName MicrosoftWindowsServer -Offer WindowsServer -Skus 2019-Datacenter -Version "latest"
$vm=Add-AZVMNetworkInterface -VM $vm -Id $nic.Id
New-AZVM -ResourceGroupName $rgName -Location $locName -VM $vm
注意事項
此命令區塊會使用階段 1 中建立的標準儲存體帳戶,以降低此開發/測試環境的成本。 針對生產 Exchange 伺服器,您必須使用進階儲存體帳戶。
從Azure 入口網站,使用本機系統管理員帳戶的認證連線到 exVM 虛擬機器。
接下來,在Windows PowerShell提示字元中使用這些命令將 exVM 加入 Windows AD 網域。
Add-Computer -DomainName "corp.contoso.com"
Restart-Computer
請注意,您必須在輸入 Add-Computer 命令之後,提供網域帳戶認證。 使用 CORP\ < ADMIN_NAME > 帳戶和密碼。
以下是階段 2 的結果。
階段 3:設定 Exchange
在此階段中,您會在 exVM 上設定 Exchange,並測試兩個信箱之間的郵件傳遞。
準備Windows Server AD
在本機電腦的Windows PowerShell命令提示字元中,執行下列命令:
Write-Host (Get-AZPublicIpaddress -Name "exVM-PublicIP" -ResourceGroup $rgName).DnsSettings.Fqdn
記下或複製命令顯示的完整 DNS 名稱。 這是 exVM 虛擬機器的網際網路 DNS 名稱。 You will need this value later.
如有需要,請使用 CORP\ <> ADMIN_NAME 帳戶和密碼,透過Azure 入口網站連線到 adVM 虛擬機器。
在 Windows PowerShell 命令提示字元下,執行下列命令:
Get-ADForest | Set-ADForest -UPNSuffixes @{Add="<DNS Name of Exchange>"}
使用 adVM 關閉遠端桌面會話。
安裝 Exchange
使用 CORP\ <> ADMIN_NAME 帳戶和密碼,透過Azure 入口網站連線至 exVM 虛擬機器。
從 exVM 開啟系統管理員層級Windows PowerShell命令提示字元,然後執行下列命令。
Install-WindowsFeature NET-Framework-45-Core, NET-Framework-45-ASPNET, NET-WCF-HTTP-Activation45, NET-WCF-Pipe-Activation45, NET-WCF-TCP-Activation45, NET-WCF-TCP-PortSharing45, RPC-over-HTTP-proxy, RSAT-Clustering, RSAT-Clustering-CmdInterface, RSAT-Clustering-Mgmt, RSAT-Clustering-PowerShell, Web-Mgmt-Console, WAS-Process-Model, Web-Asp-Net45, Web-Basic-Auth, Web-Client-Auth, Web-Digest-Auth, Web-Dir-Browsing, Web-Dyn-Compression, Web-Http-Errors, Web-Http-Logging, Web-Http-Redirect, Web-Http-Tracing, Web-ISAPI-Ext, Web-ISAPI-Filter, Web-Lgcy-Mgmt-Console, Web-Metabase, Web-Mgmt-Console, Web-Mgmt-Service, Web-Net-Ext45, Web-Request-Monitor, Web-Server, Web-Stat-Compression, Web-Static-Content, Web-Windows-Auth, Web-WMI, Windows-Identity-Foundation, RSAT-ADDS-Tools Restart-Computer
使用 CORP\ <> ADMIN_NAME 帳戶和密碼,透過Azure 入口網站連線至 exVM 虛擬機器。
從 [伺服器管理員],按一下 [本機伺服器]。 在 exVM 的 [屬性] 中,針對[IE 增強式安全性設定] 按一下 [開啟]。 在 Internet Explorer 的 [增強式安全性設定] 中,針對 [系統管理員] 和 [使用者] 按一下 [ 關閉 ],然後按一下 [ 確定]。
從 [開始] 畫面中,按一下 [Internet Explorer],然後從 https://www.microsoft.com/download/details.aspx?id=34992 下載 Unified Communications Managed API 4.0 Runtime。 出現提示時,按一下 [執行]。
當系統提示您輸入 Microsoft Unified Communications Managed API 4.0 的執行時間安裝程式時,請按 [ 下一步]。
按一下 [我已閱讀並接受授權條款],然後按一下 [ 安裝]。 在 [ 安裝完成] 頁面上,按一下 [ 完成]。
從 Internet Explorer 下載最新版的 Exchange。 如需詳細資訊,請參閱 Exchange Server 的匯報。
按一下 [儲存 ] 將 ISO 檔案儲存在 [下載] 資料夾中。
按一下 [開啟資料夾],以滑鼠右鍵按一下 Exchange ISO 檔案,然後按一下 [ 掛接]。
從 exVM 上的系統管理員層級Windows PowerShell命令提示字元,執行下列命令:
注意事項
先前 /IAcceptExchangeServerLicenseTerms 切換自 2021 年 9 月累積更新 (CU) 起將無法執行。 您現在必須使用 /IAcceptExchangeServerLicenseTerms_DiagnosticDataON 或 /IAcceptExchangeServerLicenseTerms_DiagnosticDataOFF 進行自動和指令碼安裝。
下列範例使用 /IAcceptExchangeServerLicenseTerms_DiagnosticDataON 切換。 您可將開關變更為 /IAcceptExchangeServerLicenseTerms_DiagnosticDataOFF。
e:
.\setup.exe /mode:Install /role:Mailbox /OrganizationName:Contoso /IAcceptExchangeServerLicenseTerms_DiagnosticDataON
Restart-Computer
等候 Exchange 安裝程式完成,這可能需要一些時間,並重新啟動 exVM。
將兩個信箱新增至 Exchange 伺服器
使用 CORP\ <> ADMIN_NAME 帳戶和密碼,透過Azure 入口網站連線至 exVM 虛擬機器。
從 [開始] 畫面輸入 Exchange,然後按一下 [Exchange 管理命令介面]。
將下列命令複製到記事本,插入 $dnsName 變數之 exVM 虛擬機器的網際網路 DNS 名稱,然後將產生的命令複製並貼到 Exchange 管理命令介面中。
$dnsName="<Internet DNS name of the exVM virtual machine>" $user1Name="chris@" + $dnsName $user2Name="janet@" + $dnsName $db=Get-MailboxDatabase $dbName=$db.Name $password = Read-Host "Enter password" -AsSecureString
記錄在安全的地方指定的密碼。 接下來,執行這些命令以建立兩個信箱。
New-Mailbox -UserPrincipalName $user1Name -Alias chris -Database $dbName -Name ChrisAshton -OrganizationalUnit Users -Password $password -FirstName Chris -LastName Ashton -DisplayName "Chris Ashton" New-Mailbox -UserPrincipalName $user2Name -Alias janet -Database $dbName -Name JanetSchorr -OrganizationalUnit Users -Password $password -FirstName Janet -LastName Schorr -DisplayName "Janet Schorr"
測試信箱之間的電子郵件傳遞
從本機電腦上的瀏覽器,存取網站HTTPs://< exVM 虛擬機器 >/owa的Internet DNS 名稱。 出現網站安全性憑證錯誤頁面的提示時,按一下 [ 繼續前往此網站]。 在 Outlook 登入頁面上,使用 corp\chris 帳戶名稱搭配其密碼。
當系統提示您指定語言和時區時,請選取每個語言和時區的適當值,然後按一下 [ 儲存]。
從 Chris Ashton 的收件匣中,按一下 [ 新增]。 在 [至] 中,輸入 度, 然後按一下 [搜尋目錄]。 針對 [主旨],輸入 測試訊息,然後按一下 [ 傳送]。
按一下 [郵件] 網頁右上角的使用者圖示,然後按一下 [ 登出]。
在 Outlook 登入頁面上,使用 corp\re account name 搭配其密碼。 當系統提示您指定語言和時區時,請選取每個語言和時區的適當值,然後按一下 [ 儲存]。
確認收件匣包含來自 Chris Ashton 的測試訊息。 按一下它,然後按一下 [ 全部回復]。 在訊息本文中,輸入 Replied,然後按一下 [ 傳送]。
按一下 [郵件] 網頁右上角的使用者圖示,然後按一下 [ 登出]。
在 Outlook 登入頁面上,使用 corp\chris 帳戶名稱搭配其密碼。 確認從此收件匣中傳送的回復電子郵件訊息。
您現在已準備好測試 Exchange 功能或應用程式。
停止並啟動虛擬機器
Azure 虛擬機器會在執行時帶來持續的成本。 若要協助將 Exchange 開發/測試環境的成本降到最低,請使用下列命令來停止虛擬機器:
$rgName="<your resource group name>"
Stop-AZVM -Name exVM -ResourceGroupName $rgName -Force
Stop-AZVM -Name adVM -ResourceGroupName $rgName -Force
若要重新啟動它們,請使用下列命令︰
$rgName="<your resource group name>"
Start-AZVM -Name adVM -ResourceGroupName $rgName
Start-AZVM -Name exVM -ResourceGroupName $rgName