-
Notifications
You must be signed in to change notification settings - Fork 279
/
CreateavirtualmachinefromasnapshotwithPowerShell.ps1
63 lines (43 loc) · 2.42 KB
/
CreateavirtualmachinefromasnapshotwithPowerShell.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#Provide the subscription Id
$subscriptionId = 'subscription id'
#Provide the name of your resource group
$resourceGroupName ='resource group'
#Provide the name of the snapshot that will be used to create OS disk
$snapshotName = 'snapshot name'
#Provide the name of the OS disk that will be created using the snapshot
$osDiskName = 'NewOSDisk'
#Provide the name of an existing virtual network where virtual machine will be created
$virtualNetworkName = 'vnet'
#Provide the name of the virtual machine
$VMname = 'NewVMfromSnapshot'
<#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-AzureRmVMSize -Location ukwest #>
$virtualMachineSize = 'Standard_B1s'
#Connect to Azure
Connect-AzureRmAccount
#Set the context to the subscription Id where Managed Disk will be created
Select-AzureRmSubscription -SubscriptionId $SubscriptionId
$snapshot = Get-AzureRmSnapshot -ResourceGroupName $resourceGroupName -SnapshotName $snapshotName
#Use splatting to declare common parameters
$Location = $snapshot.Location
$params = @{
ResourceGroupName = "$resourceGroupName"
Location = "$Location"
}
$diskConfig = New-AzureRmDiskConfig -Location $Location -SourceResourceId $snapshot.Id -CreateOption Copy
$disk = New-AzureRmDisk -Disk $diskConfig -ResourceGroupName $resourceGroupName -DiskName $osDiskName
#Initialize virtual machine configuration
$VirtualMachine = New-AzureRmVMConfig -VMName $VMname -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-AzureRmVMOSDisk -VM $VirtualMachine -ManagedDiskId $disk.Id -CreateOption Attach -Windows
#Create a public IP for the VM
$publicIp = New-AzureRmPublicIpAddress -Name ($VMname.ToLower()+'_ip') -AllocationMethod Dynamic @params
#Get the virtual network where virtual machine will be hosted
$vnet = Get-AzureRmVirtualNetwork -Name $virtualNetworkName -ResourceGroupName $resourceGroupName
# Create NIC in the first subnet of the virtual network
$nic = New-AzureRmNetworkInterface -Name ($VMname.ToLower()+'_nic') -SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $publicIp.Id @params
$VirtualMachine = Add-AzureRmVMNetworkInterface -VM $VirtualMachine -Id $nic.Id
#Create the virtual machine with Managed Disk
New-AzureRmVM -VM $VirtualMachine @params