Managing Azure VMs with Azure PowerShell-Part 1
Managing Azure VMs with Azure PowerShell-Part 1
Working on creating some VMs in my lab environment, thought why not post it as a reference for others
Service Configurations
1. Storage Accounts: satishlocalstorage, satishvnet1sa
2. Cloud Service: satishcloud, satishVnet1cloudsvc
3. VNET: Satishnetwork (infrasubnet, websubnet SQLsubnet), Satishvnet1 (infrasubnet1, appsubnet1)
Goal
1. Deploy VMs in a specific storage account, cloud service and VNET
2. Setting a static IP address for your existing VM
3. Create a New VM and configure a static IP during the VM deployment
4. Capturing a Sysprep’ed / generalized VM testvm2 as a template for future deployments & deploy the image
5. Capturing a running VM image for a quick snapshot & redeploy the VM to a good point in time from the latest capture
1. Deploy VMs in a specific storage account, cloud service and VNET
Associate subscription to the storageaccount
PS C:\> Set-AzureSubscription -SubscriptionName "yoursubscriptionaname" -CurrentStorageAccountName "satishlocalstorage"
(All VM’s will now be created in “satishlocalstorage” account” by default
Create a VM and from a latest image release date(best practice)
PS C:\> $image=(get-azurevmimage | where {$_.imagefamily -eq "windows Server 2012 R2 DataCenter"} | sort publisheddate -descending | select-object -first 1).imagename
PS C:\> New-AzureVMConfig -Name "testvm1" -InstanceSize "Basic_A1" -imagename $image | add-azureprovisioningconfig -windows -adminusername userid -Password yourpassword | set-azuresubnet -subnetnames "infrasubnet" | New-AzureVM -ServiceName "satishcloud" –vnetname “satishnetwork”
VM status
PS C:\> Get-AzureVM -ServiceName "satishcloud" -name "testvm1" | select-object name, ipaddress, powerstate, servicename
Name IpAddress PowerState ServiceName
---- --------- ---------- -----------
testvm1 10.101.2.4 Started satishcloud
2. Setting a static IP address for your existing VM
Configure VM “testvm1” with a static ip address of 10.101.2.99 or 10.101.2.5(whichever is available)
PS C:\> Test-AzureStaticVNetIP -vnetname "satishnetwork" -IPAddress "10.101.2.5"
PS C:\> Test-AzureStaticVNetIP -vnetname "satishnetwork" -IPAddress "10.101.2.99"
IsAvailable : True
AvailableAddresses : {}
OperationDescription : Test-AzureStaticVNetIP
OperationId : d497b983-d876-3c22-a266-c4eb0c0c773e
OperationStatus : Succeeded
PS C:\> get-azurevm -servicename "satishcloud" -name "testvm1" |Set-AzureStaticVNetIP - iPAddress "10.101.2.99" | update-Azurevm
(This command will restart and update the VM with new static IP address)
PS C:\> Get-AzureVM -ServiceName "satishcloud" -name "testvm1" | select-object name, ipaddress, powerstate, servicename
Name IpAddress PowerState ServiceName
---- --------- ---------- -----------
testvm1 10.101.2.99 Started satishcloud
PS C:\> $staticipvm=get-azurevm -servicename 'satishcloud' -name 'testvm1'
PS C:\> Get-AzureStaticVNetIP -vm $staticipvm
IPAddress
---------
10.101.2.99
If you want to remove static IP for a VM, run
Get-AzureVM -ServiceName “satishcloud” -Name “testvm1l” | Remove-AzureStaticVNetIP | Update-AzureVM
3. Create a New VM and with a static IP address
PS C:\> $image=(get-azurevmimage | where {$_.imagefamily -eq "windows Server 2012 R2 DataCenter"} | sort publisheddate -descending | select-object -first 1).imagename
PS C:\> New-AzureVMConfig -Name "Testvm2" -InstanceSize "Basic_A1" -imagename $image | add-azureprovisioningconfig -windows -adminusername username -Password yourpassword | set-azuresubnet -subnetnames "infrasubnet" | Set-AzureStaticVNetIP -IPAddress "10.101.2.100" | New-AzureVM -ServiceName "satishcloud" –vnetname “satishnetwork”
4. Capturing a Sysprep’ed / generalized VM "testvm2" as a template for future deployments & deploy the image
PS C:\> Save-AzureVMImage -ServiceName satishcloud -Name testvm2 -ImageName webtemplate1 -ImageLabel webtemplate1 -OSState Generalized
(this command will delete the VM testvm2 and create an image from this VM
Deploy a new VM called webvm1 from the capured generalized image webtemplate1
PS C:\> New-AzureVMConfig -Name "webvm1" -InstanceSize "Basic_A1" -imagename webtemplate1 | add-azureprovisioningconfig -windows -adminusername userid1 -Password yourpassword | set-azuresubnet -subnetnames "infrasubnet" | Set-AzureStaticVNetIP -IPAddress "10.101.2.100" | New-AzureVM -ServiceName "satishcloud" –vnetname “satishnetwork"
PS C:\> get-azurevm -ServiceName "satishcloud" -name "webvm1" | select-object name, ipaddress, status
Name IpAddress Status
---- --------- ------
webvm1 10.101.2.100 ReadyRole
5. Capturing a running VM "webvm1" for a quick snapshot & redeploy the VM to a good point in time from the latest capture
PS C:\> Save-AzureVMImage -ServiceName satishcloud -Name webvm1 -ImageName webvm1snapshot -ImageLabel webvm1snapshot -OSState Specialized
PS C:\> Get-AzureVMImage | where {$_.imagename -like "web*"} |select-object imagename,category,RoleName
ImageName Category RoleName
--------- -------- --------
webtemplate1 User Testvm2
webvm1snapshot User webvm1
(Next I Deleted the VM webvm1 and redeployed it, all previous configurations were intact including domainjoin in my case
PS C:\> Remove-AzureVM -ServiceName "satishcloud" -name "webvm1" -DeleteVHD
PS C:\> New-AzureVMConfig -Name "webvm1" -InstanceSize "Basic_A1" -imagename webvm1snapshot | set-azuresubnet -subnetnames "infrasubnet" | Set-AzureStaticVNetIP -IPAddress "10.101.2.100" | New-AzureVM -ServiceName "satishcloud" –vnetname “satishnetwork”
Note: when the VM is back online,and when you try to login for the first time you will see a dialog pop up stating the VM was not properly shutdown, this may be an expected behavior, as we captured a running VM
Stopped all VMs in cloud service "satishcloud"
PS C:\> get-azurevm -ServiceName "satishcloud" | stop-azurevm
DISCLAIMER: This posting is provided "AS IS" with no warranties and confers no rights