In this article, I will show you how to get Azure VMs status using Azure powershell script.
Azure VMs status
To check status of your servers, you need few things:
- Azure Credentials
- Environment
- TenantID
- Subscription
- Resource Group Name
Below you can find an example for converting your password to secure string and adding it with account ID to azure credentials variable:
1- $an example = ConvertTo-SecureString "67t1uS5HfXCc9L4d3P02" -AsPlainText -Force
2- $AzureCred = New-Object System.Management.Automation.PSCredential ("[email protected]", $SecPasswd)
Now, when credentials are set you can use Add-AzureRmAccount which adds an authenticated account to use for Azure Resource Manager cmdlet requests.
Add-AzureRmAccount -Environment AzureBros -TenantId e0527c39-0369-376d-b139-342dcd316geb -Subscription 'PowerShellBros 1' -Credential $AzureCred
Below you can find a simple script on how to get status of your VMs using Get-AzureRmVM command. I wanted to display the following properties ResourceGroupName, Name, Location, PowerState:
1- $SecPasswd = ConvertTo-SecureString "67t1uS5HfXCc9L4d3P02" -AsPlainText -Force
$AzureCred = New-Object System.Management.Automation.PSCredential ("[email protected]", $SecPasswd)
2- Add-AzureRmAccount -Environment AzureBros -TenantId e0527c39-0369-376d-b139-342dcd316geb -Subscription 'PowerShellBros 1' -Credential $azurecred
3- #Get VM status and add results to variable
$AllVMs = Get-AzureRmVM -ResourceGroupName ps_bros -Status | Select-Object ResourceGroupName,Name,Location, @{ label = “VMStatus”; Expression = { $_.PowerState } }
4- #Or get VM status where server names match VM and add results to variable
$AllVMs = Get-AzureRmVM -ResourceGroupName ps_bros -Status | Where-Object {$_.name -match "VM"} | Select-Object ResourceGroupName,Name,Location, @{ label = “VMStatus”; Expression = { $_.PowerState } }
5- #Display results in console in Wrap Mode
$AllVMs | Format-Table -Auto -Wrap
6- #Display results in new window call Grid view
$AllVMs | Out-GridView -Title "Azure VMs"
7- #Display running VMs in console
$AllVMs | Where-Object {$_.Status -eq "VM running"}
8-#Export results to CSV file and save on local machine
$AllVMs | Export-Csv "c:\users\$env:username\documents\Azure_VMs_Status.csv" -Force -NoTypeInformation
I hope this small trick will help to get VM status quickly. If you need more advance and declarative script, you should check another post to get advance script.