AzureCompute3 min read

Check whether a stopped Azure VM is still billed

Sources checked September 10, 20265 minutes per VM
On this page
THE SHORT ANSWER

A stopped VM can still incur instance-usage charges, so check its power-state code before treating shutdown as a cost stop. If it shows PowerState/stopped, ask the VM owner whether it should remain allocated. PowerState/deallocated is not billed for instance usage, but disks and networking can still incur charges.

What you need first

Tool
Azure PowerShell is a command-line tool for Azure resources. Start an authorized session in the intended subscription. Get-AzVM with -Status retrieves the VM instance view, including power-state status.
Access
If you cannot run the command, ask an authorized Azure colleague to provide the read-only instance-view result for the target subscription, resource group and VM.
If you do not use that tool
Send an authorized Azure engineer the subscription, resource group and VM name. Ask them to run the command below and return the PowerState Code, DisplayStatus and execution time.

Why this is worth a look

Skipping this check can leave a guest-shutdown VM allocated on a host and billed for instance usage. Deallocated means Azure released the lease on the underlying hardware, but Azure notes that disks and networking can continue to incur charges. Use the power state, not the provisioning state, for this decision.

Run this check

CHECKLIST

Run these read-only PowerShell steps for one ordinary Azure VM in the intended subscription. The output is a last-known status label, not usage hours or a monetary amount.

Read one Azure VM power state
1. Confirm the target is one ordinary Azure VM, not a VM scale set instance, and confirm the session uses the intended subscription.
2. Replace <resource-group> and <vm-name>, then run:

   $vm = Get-AzVM -ResourceGroupName "<resource-group>" -Name "<vm-name>" -Status
   $vm.Statuses | Where-Object { $_.Code -like "PowerState/*" } | Select-Object Code, DisplayStatus

3. Record Code, DisplayStatus and when the command ran.
4. Classify the result: PowerState/stopped is billed for instance usage; PowerState/deallocated is not billed for instance usage. Starting, Running and Stopping are billed. Creating and Deallocating are not billed for instance usage.
5. If no PowerState code is returned, do not infer that instance usage is unbilled. Retry the read-only retrieval or use Azure Resource Health.

How to confirm it

  1. 01

    Choose the VM and scope

    Record the subscription, resource group and VM name for one ordinary VM you believe is no longer incurring instance-usage charges. Use the colleague handoff if you cannot run Azure PowerShell.

  2. 02

    Read the instance power state

    Run the read-only PowerShell lines in the command below, or review your colleague's result. Use the PowerState code, not a ProvisioningState code such as Succeeded.

  3. 03

    Decide what to review next

    Ask the VM owner whether a billed, stopped VM should remain allocated. For a deallocated VM, review disks and networking separately because those resources can continue to incur charges.

Before making changes

Treat the result as Azure's last known power state, not proof of historical charges. This assumes one ordinary VM, an authorized Azure PowerShell context for the intended subscription, and the documented Get-AzVM instance-view output. Transitional states have their own billing treatment, so do not infer from a missing or unfamiliar code.

Skip this procedure for a VM scale set instance. Ask an authorized engineer for its separate instance-view result using the subscription, resource group, scale-set name and instance ID.

Primary sources