This is the “script” I used to move our older classic environment VMs to the new Azure Resource Manager.
It it is not a function – I wanted to step through the process and make sure all was well at the different points in the script.
The script assumes that there is only one Data disk (or none), and that you have created your availability set before hand.
I based most of the script off this.
I hope this helps some one.
Add-AzureAccount Login-AzureRmAccount $VMName="ASMVM01" $ServiceName="ASMVM01_Service" $SourceVMSize="Standard_A3" $DestinationAvailabilitySet="AvailabilitySet01" $PrivateIpAddress="192.168.1.10" $ResourceGroupName="ResourceGroup01" $DestinationNetworkName="Network01" $DestinationNetworkSubnet="SubeNet01" $Location="East US" $OSType="Windows" #$OSType="Linux" [switch]$DataDisk=$false $DatDiskSize=100 $SourceStorageAccountName="srcstorageaccount" $DestinationStorageAccountName="dststorageaccount" # ---- Edit above #region Get Source Storage $SourceStorageAccountKey=(Get-AzureStorageKey -StorageAccountName $SourceStorageAccountName).Primary $SourceContext = New-AzureStorageContext -StorageAccountName $SourceStorageAccountName -StorageAccountKey $SourceStorageAccountKey #endregion #region Get Destination Storage $DestinationAccountKey=(Get-AzureRmStorageAccountKey -ResourceGroupName $ResourceGroupName -Name $DestinationStorageAccountName).Key1 $DestinationContext = New-AzureStorageContext -StorageAccountName $DestinationStorageAccountName -StorageAccountKey $DestinationAccountKey #endregion #region Get SourceVM $SourceVM = Get-AzureVm -ServiceName $ServiceName -Name $VMName if (! $SourceVM.Status -eq "StoppedDeallocated"){ "You need to sopt $SourceVM first" return; } #endregion #region Copy SystemDisk $SourceSystemDisk=Get-AzureDisk | Where-Object { $_.AttachedTo.RoleName -eq "$VMName" } | where {$_.OS -eq $OSType} $DestinationSystemDiskName="$($VMNAME)_SYSTEM.vhd" write-host "Copying System Disk" Write-Host "Start-AzureStorageBlobCopy -Context $SourceContext -AbsoluteUri $($SourceSystemDisk.MediaLink.AbsoluteUri) -DestContainer ""vhds"" -DestBlob $DestinationSystemDiskName -DestContext $DestinationContext -Verbose" $SystemBlob = Start-AzureStorageBlobCopy -Context $SourceContext -AbsoluteUri $($SourceSystemDisk.MediaLink.AbsoluteUri) -DestContainer "vhds" -DestBlob $DestinationSystemDiskName -DestContext $DestinationContext -Verbose $SystemBlob | Get-AzureStorageBlobCopyState While ($($SystemBlob | Get-AzureStorageBlobCopyState).Status -ne "Success"){ sleep 5 $BlobCopyStatus=$SystemBlob | Get-AzureStorageBlobCopyState "$($($BlobCopyStatus).Status) ($($BlobCopyStatus).BytesCopied) of $($($BlobCopyStatus).TotalBytes) bytes)" } #endregion #region Copy Data Disk if ($DataDisk){ $SourceDataDisk=Get-AzureDisk | Where-Object { $_.AttachedTo.RoleName -eq "$VMName" } | where {! $_.OS} $DestinationDataDiskName="$($VMNAME)_DATA01.vhd" write-host "Copying Data disk" Write-Host "Start-AzureStorageBlobCopy -Context $SourceContext -AbsoluteUri $($SourceDataDisk.MediaLink.AbsoluteUri) -DestContainer ""vhds"" -DestBlob $DestinationDataDiskName -DestContext $DestinationContext -Verbose" $DataDiskBlob = Start-AzureStorageBlobCopy -Context $SourceContext -AbsoluteUri $($SourceDataDisk.MediaLink.AbsoluteUri) -DestContainer "vhds" -DestBlob $DestinationDataDiskName -DestContext $DestinationContext -Verbose $DataDiskBlob | Get-AzureStorageBlobCopyState While ($($DataDiskBlob | Get-AzureStorageBlobCopyState).Status -ne "Success"){ sleep 5 $BlobCopyStatus=$DataDiskBlob | Get-AzureStorageBlobCopyState "$($($BlobCopyStatus).Status) ($($BlobCopyStatus).BytesCopied) of $($($BlobCopyStatus).TotalBytes) bytes)" } } #endregion #region Build New VM $DestinationVM = New-AzureRmVMConfig -vmName $vmName -vmSize $SourceVMSize -AvailabilitySetId $(Get-AzureRmAvailabilitySet -ResourceGroupName $ResourceGroupName -Name $DestinationAvailabilitySet).Id $nicName="$($VMName)_NIC01" $vnet = Get-AzureRmVirtualNetwork -Name $DestinationNetworkName -ResourceGroupName $ResourceGroupName $subnet = $vnet.Subnets | where {$_.Name -eq $DestinationNetworkSubnet} $nic = New-AzureRmNetworkInterface -Name $nicName -ResourceGroupName $ResourceGroupName -Location $Location -SubnetId $Subnet.Id -PrivateIpAddress $PrivateIpAddress $DestinationVM = Add-AzureRmVMNetworkInterface -VM $DestinationVM -Id $nic.Id $DestinationSystemDiskUri = "$($DestinationContext.BlobEndPoint)vhds/$DestinationSystemDiskName" $DestinationDataDiskUri = "$($DestinationContext.BlobEndPoint)vhds/$DestinationDataDiskName" If ($OSType -eq "Windows"){ $DestinationVM = Set-AzureRmVMOSDisk -VM $DestinationVM -Name $DestinationSystemDiskName -VhdUri $DestinationSystemDiskUri -Windows -CreateOption attach if ($DataDisk){ $DestinationVM = Add-AzureRmVMDataDisk -VM $DestinationVM -Name $DestinationDataDiskName -VhdUri $DestinationDataDiskUri -CreateOption attach -DiskSizeInGB $DatDiskSize } } If ($OSType -eq "Linux"){ $DestinationVM = Set-AzureRmVMOSDisk -VM $DestinationVM -Name $SourceSystemDisk -VhdUri $DestinationOSDiskUri -Linux -CreateOption attach if ($DataDisk){ $DestinationVM = Add-AzureRmVMDataDisk -VM $DestinationVM -Name $DestinationDataDiskName -VhdUri $DestinationDataDiskUri -CreateOption attach -DiskSizeInGB $DatDiskSize } } New-AzureRmVM -ResourceGroupName $resourceGroupName -Location $Location -VM $DestinationVM #endregion
Comments are closed.