Create a virtual machine using an existing managed OS disk with PowerShell
This script creates a virtual machine by attaching an existing managed disk as OS disk. Use this script in preceding scenarios:
- Create a VM from an existing managed OS disk that was copied from a managed disk in different subscription
- Create a VM from an existing managed disk that was created from a specialized VHD file
- Create a VM from an existing managed OS disk that was created from a snapshot
This article has been updated to use the new Azure PowerShell Az module. To learn more about the new Az module and AzureRM compatibility, see Introducing the new Azure PowerShell Az module. For installation instructions, see Install Azure PowerShell.
#Provide the subscription Id $subscriptionId = 'yourSubscriptionId' #Provide the name of your resource group $resourceGroupName ='yourResourceGroupName' #Provide the name of the snapshot that will be used to create OS disk $snapshotName = 'yourSnapshotName' #Provide the name of the OS disk that will be created using the snapshot $osDiskName = 'yourOSDiskName' #Provide the name of an existing virtual network where virtual machine will be created $virtualNetworkName = 'yourVNETName' #Provide the name of the virtual machine $virtualMachineName = 'yourVMName' #Provide the size of the virtual machine #e.g. Standard_DS3 #Get all the vm sizes in a region using below script: #e.g. Get-AzVMSize -Location westus $virtualMachineSize = 'Standard_DS3' #Set the context to the subscription Id where Managed Disk will be created Select-AzSubscription -SubscriptionId $SubscriptionId $snapshot = Get-AzSnapshot -ResourceGroupName $resourceGroupName -SnapshotName $snapshotName $diskConfig = New-AzDiskConfig -Location $snapshot.Location -SourceResourceId $snapshot.Id -CreateOption Copy $disk = New-AzDisk -Disk $diskConfig -ResourceGroupName $resourceGroupName -DiskName $osDiskName #Initialize virtual machine configuration $VirtualMachine = New-AzVMConfig -VMName $virtualMachineName -VMSize $virtualMachineSize #Use the Managed Disk Resource Id to attach it to the virtual machine. Please change the OS type to linux if OS disk has linux OS $VirtualMachine = Set-AzVMOSDisk -VM $VirtualMachine -ManagedDiskId $disk.Id -CreateOption Attach -Windows #Create a public IP for the VM $publicIp = New-AzPublicIpAddress -Name ($VirtualMachineName.ToLower()+'_ip') -ResourceGroupName $resourceGroupName -Location $snapshot.Location -AllocationMethod Dynamic #Get the virtual network where virtual machine will be hosted $vnet = Get-AzVirtualNetwork -Name $virtualNetworkName -ResourceGroupName $resourceGroupName # Create NIC in the first subnet of the virtual network $nic = New-AzNetworkInterface -Name ($VirtualMachineName.ToLower()+'_nic') -ResourceGroupName $resourceGroupName -Location $snapshot.Location -SubnetId $vnet.Subnets.Id -PublicIpAddressId $publicIp.Id $VirtualMachine = Add-AzVMNetworkInterface -VM $VirtualMachine -Id $nic.Id #Create the virtual machine with Managed Disk New-AzVM -VM $VirtualMachine -ResourceGroupName $resourceGroupName -Location $snapshot.Location
Clean up deployment
Run the following command to remove the resource group, VM, and all related resources.
Remove-AzResourceGroup -Name myResourceGroup
This script uses the following commands to get managed disk properties, attach a managed disk to a new VM and create a VM. Each item in the table links to command specific documentation.
|Get-AzDisk||Gets disk object based on the name and the resource group of a disk. Id property of the returned disk object is used to attach the disk to a new VM|
|New-AzVMConfig||Creates a VM configuration. This configuration includes information such as VM name, operating system, and administrative credentials. The configuration is used during VM creation.|
|Set-AzVMOSDisk||Attaches a managed disk using the Id property of the disk as OS disk to a new virtual machine|
|New-AzPublicIpAddress||Creates a public IP address.|
|New-AzNetworkInterface||Creates a network interface.|
|New-AzVM||Create a virtual machine.|
|Remove-AzResourceGroup||Removes a resource group and all resources contained within.|
For marketplace images use Set-AzVMPlan to set the plan information.
Set-AzVMPlan -VM $VirtualMachine -Publisher $Publisher -Product $Product -Name $Bame
For more information on the Azure PowerShell module, see Azure PowerShell documentation.
Additional virtual machine PowerShell script samples can be found in the Azure Windows VM documentation.
We'd love to hear your thoughts. Choose the type you'd like to provide:
Our feedback system is built on GitHub Issues. Read more on our blog.