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 

 

 


Comments (0)

Skip to main content