Since version 0.8.0, the Azure PowerShell can target multiple APIs, included in 2 PowerShell modules. Even if the name of some cmdlets are the same, they greatly differ in their inputs and responses. First we have the older cmdlets, the PowerShell Azure Service Management Cmdlets and then we have the newer APIs Azure Resource Manage Cmdlets
A newer version of this article for Azure PowerShell v1.0.x is available here:
How to get the status of a Virtual Machine under the v2 compute model in Azure PowerShell v1.0
Do it, the older cmdlets style
In the older API, to get the VM status you would do the following:
Add-AzureAccount -Credential $cred
Select-AzureSubscription -SubscriptionId $mySubscriptionId
$vm = Get-AzureVM -ServiceName 'MyCloudService' -Name 'MyVMName'
$vm | Select-Object Status, PowerState
In this example you'll get the state of the VM and cloud service.
Under the newer API (AzureResourceManager), if you call the Get-AzureVM like you would have done in the older API you'll get the deployed definition of the VM but will find no traces of the Virtual machine status.
Switch-AzureMode -Name AzureResourceManager
Add-AzureAccount -Credential $cred
Select-AzureSubscription -SubscriptionId $mySubscriptionId
Get-AzureVM -ResourceGroupName "myRG" -Name "MyVMName"
It is important to remember that Virtual Machines in the new model (Compute Resource Provider/v2) do not rely on Cloud Services anymore. In the older model, a virtual machine required a Cloud Service to exist, this is not the case anymore.
There is a link to an excellent article about changes in the new IaaS model in the Reference section.
Do it, the newer cmdlets style
To get the status of the virtual machine under the ARM API, you need to specify a new switch in the PowerShell cmdlet named -Status
. It will take a little bit more time, but this time you'll have a completely different response than the previous call we made. It will contains the information you are looking for in the Statuses
member.
Switch-AzureMode -Name AzureResourceManager
Add-AzureAccount -Credential $cred
Select-AzureSubscription -SubscriptionId $mySubscriptionId
$vm = Get-AzureVM -ResourceGroupName "myRG" -Name "MyVMName" -Status
$vm.Statuses
You will have all the VM information you need to automate your scale up/down and automation scenarios... Enjoy!