Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
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