run on your sample-vm
waagent -deprovision+user |
run on your azure-cli env
$rgName = "VMTestGroup" $template = "Template-test.json" $vmName = "VMTest" $vhdName = "VHDTest" azure vm deallocate -g $rgName -n $vmName azure vm generalize $rgName -n $vmName azure vm capture $rgName $vmName $vhdName -t $template # the $template should looks like this. and you have to change 'newvmname' before use. ... "storageProfile": { "dataDisks": [ { "caching": "ReadOnly", "vhd": { "uri": "https://yourdiskname.blob.core.windows.net/vhds/dataDisk-0.newvmname.vhd" }, "image": { "uri": "https://yourdiskname.blob.core.windows.net/system/Microsoft.Compute/Images/vhds/yourcapturedvmname-dataDisk-0.ff60129b-...3cf59bf9315a.vhd" }, "createOption": "FromImage", "name": "yourcapturedvmname-dataDisk-0.ff60129b-4ec5-4dcd-ae97-3cf59bf9315a.vhd", "lun": 0 } ], "osDisk": { "caching": "ReadWrite", "vhd": { "uri": "https://yourdiskname.blob.core.windows.net/vhds/osDisk.newvmname.vhd" }, "image": { "uri": "https://yourdiskname.blob.core.windows.net/system/Microsoft.Compute/Images/vhds/yourcapturedvmname-osDisk.ff60129b-...3cf59bf9315a.vhd" }, "createOption": "FromImage", "name": "yourcapturedvmname-osDisk.ff60129b-4ec5-4dcd-ae97-3cf59bf9315a.vhd", "osType": "Linux" } }, ... azure group deployment create $rgName MyDeployment -f Template-test-modified.json info: Executing command group deployment create info: Supply values for the following parameters vmName: NewVmName adminUserName: username adminPassword: password networkInterfaceId: /subscriptions/61719d1b-...ab74b6f77865/resourceGroups/VMTestGroup/providers/Microsoft.Network/networkInterfaces/YourNetworkInterfaceName #If you do not have an existing NetworkInterface, you need create first. azure network nic create $rgName YourNetworkInterfaceName -k default -m YourSubnetVnetName -l "westus2" |