使用 PowerShell 创建 Azure VM 的自定义映像
上一篇中我们讲如何使用Azure门户页面创建Azure VM自定义映像,并基于此映像创建一个新的虚拟机,今天我们将利用Azure PowerShell自定义虚拟机映像文件。
登陆Azure门户创建一台Windows Server虚拟机
使用“MSTSC”远程登陆到该VM,并安装.Net3.5
使用“sysprep”通用化该服务器。以管理员身份打开“命令提示符”窗口。 将目录切换到 %windir%\system32\sysprep,然后运行 sysprep.exe。
在“系统准备工具”对话框中,选择“进入系统全新体验(OOBE)”,确保已选中“通用化”复选框。
使用以下命令释放虚拟机计算资源以解除VM
Stop-AzureRmVM -ResourceGroupName 35vCloudLab -Name 35vCloudLab -Force
使用以下命令将虚拟机的状态设置为 -Generalized
使用以下命令获取虚拟机
$vm = Get-AzureRmVM -Name 35vCloudLab -ResourceGroupName 35vCloudLab
使用以下命令创建虚拟机映像配置
$image = New-AzureRmImageConfig -Location ChinaEast -SourceVirtualMachineId $vm.ID
使用以下命令创建虚拟机映像
New-AzureRmImage -Image $image -ImageName 35vCloudLabImage -ResourceGroupName 35vCloudLab
以上,我们使用Azure PoweShell创建了虚拟机映像文件“35vCloudLabImage”,下面我们将使用Get-AzureRmImage 创建变量$image来存储自定义映像的相关信息,然后使用Set-AzureRmVMSourceImage并通过刚创建的$image变量指定 ID
$cred = Get-Credential -Message “Enter a username and password for the virtual machine.”
New-AzureRmResourceGroup -Name TestLabFromImage -Location ChinaEast
$subnetConfig = New-AzureRmVirtualNetworkSubnetConfig `
-Name mySubnet `
-AddressPrefix 192.168.1.0/24
$vnet = New-AzureRmVirtualNetwork `
-ResourceGroupName TestLabFromImage `
-Location ChinaEast `
-Name TestLabvNet `
-AddressPrefix 192.168.0.0/16 `
-Subnet $subnetConfig
$pip = New-AzureRmPublicIpAddress `
-ResourceGroupName TestLabFromImage `
-Location ChinaEast `
-Name “mypublicdns$(Get-Random)” `
-AllocationMethod Static `
-IdleTimeoutInMinutes 4
$nsgRuleRDP = New-AzureRmNetworkSecurityRuleConfig `
-Name myNetworkSecurityGroupRuleRDP `
-Protocol Tcp `
-Direction Inbound `
-Priority 1000 `
-SourceAddressPrefix * `
-SourcePortRange * `
-DestinationAddressPrefix * `
-DestinationPortRange 3389 `
-Access Allow
$nsg = New-AzureRmNetworkSecurityGroup `
-ResourceGroupName TestLabFromImage `
-Location ChinaEast `
-Name TestLabNSG `
-SecurityRules $nsgRuleRDP
$nic = New-AzureRmNetworkInterface `
-Name myNic `
-ResourceGroupName TestLabFromImage `
-Location ChinaEast `
-SubnetId $vnet.Subnets[0].Id `
-PublicIpAddressId $pip.Id `
-NetworkSecurityGroupId $nsg.Id
$vmConfig = New-AzureRmVMConfig `
-VMName TestLabVM `
-VMSize Standard_A1 | Set-AzureRmVMOperatingSystem -Windows `
-ComputerName TestLabVM `
-Credential $cred
# Here is where we create a variable to store information about the image
$image = Get-AzureRmImage `
-ImageName 35vCloudLabImage `
-ResourceGroupName TestLabFromImage
# Here is where we specify that we want to create the VM from and image and provide the image ID
$vmConfig = Set-AzureRmVMSourceImage -VM $vmConfig -Id $image.Id
$vmConfig = Add-AzureRmVMNetworkInterface -VM $vmConfig -Id $nic.Id
New-AzureRmVM `
-ResourceGroupName TestLabFromImage `
-Location ChinaEast `
-VM $vmConfig
使用“Get-AzureRmVM”查看创建的VM
如果有已经创建了很多个自定义虚拟机映像文件,那么可以使用以下脚本列出所有自定义虚拟机映像文件
$images = Find-AzureRMResource -ResourceType Microsoft.Compute/images
$images.name
使用以下脚本删除映像文件
Remove-AzureRmImage `
-ImageName myOldImage `
-ResourceGroupName myResourceGroup
可以看见映像文件“35vCloudLabImage”已经被删除