本主題逐步講解如何使用 PowerShell 將通用化 VM 的 VHD 上傳到 Azure、從該 VHD 創(chuàng)建映像,然后從該映像創(chuàng)建新 VM。 可以上傳從本地虛擬化工具或其他云導(dǎo)出的 VHD。 對(duì)新的 VM 使用托管磁盤(pán)可以簡(jiǎn)化 VM 管理,在將 VM 置于可用性集中時(shí)提供更好的可用性。
若要使用示例腳本,請(qǐng)參閱將 VHD 上傳到 Azure 并創(chuàng)建新的 VM 的示例腳本
開(kāi)始之前
將任何 VHD 上傳到 Azure 之前,應(yīng)該遵循準(zhǔn)備要上傳到 Azure 的 Windows VHD 或 VHDX
開(kāi)始遷移到托管磁盤(pán)之前,請(qǐng)先查看規(guī)劃遷移到托管磁盤(pán)。
請(qǐng)確保有最新版本的 AzureRM.Compute PowerShell 模塊。 運(yùn)行以下命令來(lái)安裝該模塊。
PowerShell復(fù)制
Install-ModuleAzureRM.Compute-RequiredVersion2.6.0
有關(guān)詳細(xì)信息,請(qǐng)參閱Azure PowerShell 版本控制。
使用 Sysprep 通用化 Windows VM
Sysprep 將刪除所有個(gè)人帳戶信息及其他某些數(shù)據(jù),并準(zhǔn)備好要用作映像的計(jì)算機(jī)。 有關(guān) Sysprep 的詳細(xì)信息,請(qǐng)參閱如何使用 Sysprep:簡(jiǎn)介。
確保 Sysprep 支持計(jì)算機(jī)上運(yùn)行的服務(wù)器角色。 有關(guān)詳細(xì)信息,請(qǐng)參閱Sysprep Support for Server Roles
Important
如果在首次將 VHD 上傳到 Azure 之前運(yùn)行 Sysprep,請(qǐng)確保先準(zhǔn)備好 VM,然后再運(yùn)行 Sysprep。
登錄到 Windows 虛擬機(jī)。
以管理員身份打開(kāi)“命令提示符”窗口。 將目錄切換到%windir%\system32\sysprep,然后運(yùn)行sysprep.exe。
在“系統(tǒng)準(zhǔn)備工具”對(duì)話框中,選擇“進(jìn)入系統(tǒng)全新體驗(yàn)(OOBE)”,確保已選中“通用化”復(fù)選框。
在“關(guān)機(jī)選項(xiàng)”中選擇“關(guān)機(jī)”。
單擊“確定”。

在 Sysprep 完成時(shí),它會(huì)關(guān)閉虛擬機(jī)。 不要重新啟動(dòng) VM。
登錄到 Azure
如果尚未安裝 Azure PowerShell 1.4 版或更高版本,請(qǐng)閱讀如何安裝和配置 Azure PowerShell。
打開(kāi) Azure PowerShell 并登錄到 Azure 帳戶。 此時(shí)會(huì)打開(kāi)一個(gè)彈出窗口讓輸入 Azure 帳戶憑據(jù)。
PowerShell復(fù)制
Login-AzureRmAccount-EnvironmentNameAzureChinaCloud
獲取可用訂閱的訂閱 ID。
PowerShell復(fù)制
Get-AzureRmSubscription
使用訂閱 ID 設(shè)置正確的訂閱。 將替換為正確訂閱的 ID。
PowerShell復(fù)制
Select-AzureRmSubscription-SubscriptionId""
獲取存儲(chǔ)帳戶
需要在 Azure 中創(chuàng)建存儲(chǔ)帳戶來(lái)存儲(chǔ)上傳的 VM 映像。 可以使用現(xiàn)有存儲(chǔ)帳戶,也可以創(chuàng)建新存儲(chǔ)帳戶。
如果要使用 VHD 為 VM 創(chuàng)建托管磁盤(pán),存儲(chǔ)帳戶位置必須與要?jiǎng)?chuàng)建 VM 的位置相同。
顯示可用的存儲(chǔ)帳戶,請(qǐng)鍵入:
PowerShell復(fù)制
Get-AzureRmStorageAccount
如果要使用現(xiàn)有存儲(chǔ)帳戶,請(qǐng)轉(zhuǎn)到上傳 VM 映像部分。
若要?jiǎng)?chuàng)建存儲(chǔ)帳戶,請(qǐng)執(zhí)行以下步驟:
需要應(yīng)在其中創(chuàng)建存儲(chǔ)帳戶的資源組的名稱。 若要查找訂閱中的所有資源組,請(qǐng)鍵入:
PowerShell復(fù)制
Get-AzureRmResourceGroup
若要在中國(guó)東部區(qū)域中創(chuàng)建名為myResourceGroup的資源組,請(qǐng)鍵入:
PowerShell復(fù)制
New-AzureRmResourceGroup-NamemyResourceGroup-Location"China East"
使用New-AzureRmStorageAccountcmdlet 在此資源組中創(chuàng)建名為mystorageaccount的存儲(chǔ)帳戶:
PowerShell復(fù)制
New-AzureRmStorageAccount-ResourceGroupNamemyResourceGroup-Namemystorageaccount-Location"China East"`-SkuName"Standard_LRS"-Kind"Storage"
-SkuName 的有效值為:
Standard_LRS- 本地冗余存儲(chǔ)。
Standard_ZRS- 區(qū)域冗余存儲(chǔ)。
Standard_GRS- 異地冗余存儲(chǔ)。
Standard_RAGRS- 讀取訪問(wèn)權(quán)限異地冗余存儲(chǔ)。
Premium_LRS- 高級(jí)本地冗余存儲(chǔ)。
將 VHD 上傳到存儲(chǔ)帳戶
使用Add-AzureRmVhdcmdlet 將 VHD 上傳到存儲(chǔ)帳戶中的容器。 本示例將文件myVHD.vhd從"C:\Users\Public\Documents\Virtual hard disks\"上傳到myResourceGroup資源組中名為mystorageaccount的存儲(chǔ)帳戶。 該文件將放入名為mycontainer的容器,新文件名為myUploadedVHD.vhd。
PowerShell復(fù)制
$rgName="myResourceGroup"$urlOfUploadedImageVhd="https://mystorageaccount.blob.core.chinacloudapi.cn/mycontainer/myUploadedVHD.vhd"Add-AzureRmVhd-ResourceGroupName$rgName-Destination$urlOfUploadedImageVhd`-LocalFilePath"C:\Users\Public\Documents\Virtual hard disks\myVHD.vhd"
如果成功,會(huì)顯示類似于下面的響應(yīng):
PowerShell復(fù)制
MD5 hash is being calculatedforthe file C:\Users\Public\Documents\Virtual hard disks\myVHD.vhd.MD5 hash calculation is completed.Elapsed timeforthe operation:00:03:35Creating new page blob of size53687091712...Elapsed timeforupload:01:12:49LocalFilePath? ? ? ? ? DestinationUri---------------------------C:\Users\Public\Doc...? https://mystorageaccount.blob.core.chinacloudapi.cn/mycontainer/myUploadedVHD.vhd
完成執(zhí)行此命令可能需要一段時(shí)間,具體取決于網(wǎng)絡(luò)連接速度和 VHD 文件的大小
如果要使用上傳的 VHD 創(chuàng)建托管磁盤(pán)或新 VM,請(qǐng)保存目標(biāo) URI路徑供稍后使用。
用于上傳 VHD 的其他選項(xiàng)
也可以使用以下方法之一將 VHD 上傳到存儲(chǔ)帳戶:
Storage Import/Export Service REST API Reference(存儲(chǔ)導(dǎo)入/導(dǎo)出服務(wù) REST API 參考)
如果預(yù)估上傳時(shí)間大于 7 天,建議使用導(dǎo)入/導(dǎo)出服務(wù)。 可根據(jù)數(shù)據(jù)大小和傳輸單位,利用DataTransferSpeedCalculator預(yù)估時(shí)間。 導(dǎo)入/導(dǎo)出可用于復(fù)制到標(biāo)準(zhǔn)存儲(chǔ)帳戶。 需要使用 AzCopy 等工具從標(biāo)準(zhǔn)存儲(chǔ)復(fù)制到高級(jí)存儲(chǔ)帳戶。
通過(guò)上傳的 VHD 創(chuàng)建托管映像
使用通用 OS VHD 創(chuàng)建托管映像。 將值替換為自己的信息。
首先,設(shè)置公共參數(shù):
PowerShell復(fù)制
$vmName="myVM"$computerName="myComputer"$vmSize="Standard_DS1_v2"$location="China East"$imageName="yourImageName"
使用通用 OS VHD 創(chuàng)建映像。
PowerShell復(fù)制
$imageConfig=New-AzureRmImageConfig-Location$location$imageConfig=Set-AzureRmImageOsDisk-Image$imageConfig-OsTypeWindows-OsStateGeneralized-BlobUri$urlOfUploadedImageVhd$image=New-AzureRmImage-ImageName$imageName-ResourceGroupName$rgName-Image$imageConfig
創(chuàng)建虛擬網(wǎng)絡(luò)
創(chuàng)建虛擬網(wǎng)絡(luò)的 vNet 和子網(wǎng)。
創(chuàng)建子網(wǎng)。 此示例創(chuàng)建名為mySubnet的子網(wǎng),其地址前綴為10.0.0.0/24。
PowerShell復(fù)制
$subnetName="mySubnet"$singleSubnet=New-AzureRmVirtualNetworkSubnetConfig-Name$subnetName-AddressPrefix10.0.0.0/24
創(chuàng)建虛擬網(wǎng)絡(luò)。 此示例創(chuàng)建名為myVnet的虛擬網(wǎng)絡(luò),其地址前綴為10.0.0.0/16。
PowerShell復(fù)制
$vnetName="myVnet"$vnet=New-AzureRmVirtualNetwork-Name$vnetName-ResourceGroupName$rgName-Location$location`-AddressPrefix10.0.0.0/16-Subnet$singleSubnet
創(chuàng)建公共 IP 地址和網(wǎng)絡(luò)接口
若要與虛擬網(wǎng)絡(luò)中的虛擬機(jī)通信,需要一個(gè)公共 IP 地址和網(wǎng)絡(luò)接口。
創(chuàng)建公共 IP 地址。 此示例創(chuàng)建名為myPip的公共 IP 地址。
PowerShell復(fù)制
$ipName="myPip"$pip=New-AzureRmPublicIpAddress-Name$ipName-ResourceGroupName$rgName-Location$location`-AllocationMethodDynamic
創(chuàng)建 NIC。 此示例創(chuàng)建名為myNic的 NIC。
PowerShell復(fù)制
$nicName="myNic"$nic=New-AzureRmNetworkInterface-Name$nicName-ResourceGroupName$rgName-Location$location`-SubnetId$vnet.Subnets[0].Id-PublicIpAddressId$pip.Id
創(chuàng)建網(wǎng)絡(luò)安全組和 RDP 規(guī)則
若要使用 RDP 登錄到 VM,需要?jiǎng)?chuàng)建一個(gè)允許在端口 3389 上進(jìn)行 RDP 訪問(wèn)的網(wǎng)絡(luò)安全規(guī)則 (NSG)。
此示例創(chuàng)建名為myNsg的 NSG,其中包含一個(gè)允許通過(guò)端口 3389 傳輸 RDP 流量的、名為myRdpRule的規(guī)則。 有關(guān) NSG 的詳細(xì)信息,請(qǐng)參閱Opening ports to a VM in Azure using PowerShell(使用 PowerShell 在 Azure 中打開(kāi) VM 端口)。
PowerShell復(fù)制
$nsgName="myNsg"$ruleName="myRdpRule"$rdpRule=New-AzureRmNetworkSecurityRuleConfig-Name$ruleName-Description"Allow RDP"`-AccessAllow-ProtocolTcp-DirectionInbound-Priority110`-SourceAddressPrefixInternet-SourcePortRange* `-DestinationAddressPrefix*-DestinationPortRange3389$nsg=New-AzureRmNetworkSecurityGroup-ResourceGroupName$rgName-Location$location`-Name$nsgName-SecurityRules$rdpRule
為虛擬網(wǎng)絡(luò)創(chuàng)建變量
為完成的虛擬網(wǎng)絡(luò)創(chuàng)建變量。
PowerShell復(fù)制
$vnet=Get-AzureRmVirtualNetwork-ResourceGroupName$rgName-Name$vnetName
獲取 VM 的憑據(jù)
以下 cmdlet 將打開(kāi)一個(gè)窗口,需在其中輸入遠(yuǎn)程訪問(wèn) VM 所用的本地管理員帳戶的新用戶名和密碼。
PowerShell復(fù)制
$cred=Get-Credential
將 VM 的名稱和大小添加到 VM 配置。
PowerShell復(fù)制
$vm=New-AzureRmVMConfig-VMName$vmName-VMSize$vmSize
將 VM 映像設(shè)置為新 VM 的源映像
使用托管 VM 映像的 ID 設(shè)置源映像。
PowerShell復(fù)制
$vm=Set-AzureRmVMSourceImage-VM$vm-Id$image.Id
設(shè)置 OS 配置并添加 NIC。
輸入 OS 磁盤(pán)的存儲(chǔ)類型(PremiumLRS 或 StandardLRS)和大小。 此示例將帳戶類型設(shè)置為PremiumLRS,將磁盤(pán)大小設(shè)置為128 GB,將磁盤(pán)緩存設(shè)置為ReadWrite。
PowerShell復(fù)制
$vm=Set-AzureRmVMOSDisk-VM$vm-DiskSizeInGB128`-CreateOption FromImage-CachingReadWrite$vm=Set-AzureRmVMOperatingSystem-VM$vm-Windows-ComputerName$computerName`-Credential$cred-ProvisionVMAgent-EnableAutoUpdate$vm=Add-AzureRmVMNetworkInterface-VM$vm-Id$nic.Id
創(chuàng)建 VM
使用存儲(chǔ)在$vm變量中的配置創(chuàng)建新 VM。
PowerShell復(fù)制
New-AzureRmVM-VM$vm-ResourceGroupName$rgName-Location$location
驗(yàn)證是否已創(chuàng)建 VM
完成后,應(yīng)會(huì)在Azure 門(mén)戶的“瀏覽” > “虛擬機(jī)”下看到新建的 VM,也可以使用以下 PowerShell 命令查看該 VM:
PowerShell復(fù)制
$vmList=Get-AzureRmVM-ResourceGroupName$rgName$vmList.Name
后續(xù)步驟
若要登錄到新虛擬機(jī),請(qǐng)?jiān)?a target="_blank" rel="nofollow">門(mén)戶中瀏覽到該 VM,單擊“連接”,然后打開(kāi)遠(yuǎn)程桌面 RDP 文件。 使用原始虛擬機(jī)的帳戶憑據(jù)登錄到新虛擬機(jī)。 有關(guān)詳細(xì)信息,請(qǐng)參閱How to connect and log on to an Azure virtual machine running Windows(如何連接并登錄到運(yùn)行 Windows 的 Azure 虛擬機(jī))。
立即訪問(wèn)http://market.azure.cn