Quantcast
Channel: How to get list of all Azure VMs in Powershell - Stack Overflow
Viewing all articles
Browse latest Browse all 6

Answer by TeamDman for How to get list of all Azure VMs in Powershell

$
0
0

Using the Azure CLI, we can use the az vm list command to get a list of all VMs in the current subscription. Adding on this, we just loop over all our subscriptions and add the results to a single list

$results=New-Object -TypeName System.Collections.ArrayList;$subs = az account list | ConvertFrom-Json;$subIndex = 0;foreach ($sub in $subs){    $subIndex++;    Write-Progress "Gathering VMs" -Status $sub.name -PercentComplete ($subIndex / $subs.Count * 100)    $vms = az vm list --subscription $sub.id | ConvertFrom-Json    $results.Add(@{        subscription = $sub        vms = $vms    }) > $null;    $results | ConvertTo-Json -Depth 100 > vms.json;}

This, however, does not include the power on/off state of the vms

We can get all the VM info + the power state using the az graph query command. This has the benefit of being even faster. A little work is needed to process the paginated results, but it's still fairly easy.

$query = "Resources| where type == 'microsoft.compute/virtualmachines'| extend PowerState = tostring(properties.extended.instanceView.powerState.code)| extend vmSize = tostring(properties.hardwareProfile.vmSize)";$params = @("--graph-query", $query -replace "`n", """--output", "json");$total=New-Object -TypeName System.Collections.ArrayList;$count=0;while ($true){    $results = az graph query @params | ConvertFrom-Json;    foreach ($d in $results.data)    {        $total.Add($d);    }    $count += $results.count;    $params = @("--graph-query", $query -replace "`n", """--output", "json""--skip-token", $results.skip_token"--skip", $count    );    if ([string]::IsNullOrEmpty($results.skip_token)) {break;}}$total | ConvertTo-Json -Depth 100 > vms_fast.json;

Note that we use array splatting instead of object splatting


Viewing all articles
Browse latest Browse all 6

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>