Import-Module Az.Accounts
Import-Module Az.Resources
Import-Module Az.Compute
Import-Module Az.Monitor
# Specify the number of subscriptions to iterate through
$subscriptionLimit = 10
# Initialize a counter
$counter = 1
# Initialize the report array
$report = @()
# Get the list of all subscriptions
$subscriptions = Get-AzSubscription | Where-Object { $_.State -eq 'Enabled' }
Foreach ($sub in $subscriptions) {
if ($counter -ge $subscriptionLimit) {
break
}
# Set the subscription context
Select-AzSubscription -Subscription $sub | Out-Null
$subName = $sub.Name
$vms = Get-AzVM
foreach ($vm in $vms) {
$info = "" | Select VmName, ResourceGroupName, Region, VmSize, OsType, Subscription, Cores, Memory, OSDiskSize
[string]$sku = $vm.StorageProfile.ImageReference.Sku
[string]$os = $vm.StorageProfile.ImageReference.Offer
$info.VMName = $vm.Name
$vmLocation = $vm.Location
$info.ResourceGroupName = $vm.ResourceGroupName
$info.Region = $vmLocation
$info.VmSize = $vm.HardwareProfile.VmSize
$info.Subscription = $subName
$sizeDetails = Get-AzVMSize -Location $vmLocation | where {$_.Name -eq $vm.HardwareProfile.VmSize}
$info.Cores = $sizeDetails.NumberOfCores
$info.Memory = $sizeDetails.MemoryInMB
$info.OsType = $vm.StorageProfile.OSDisk.OSType
$info.OSDiskSize = $vm.StorageProfile.OSDisk.DiskSizeGB
$report += $info
}
# Increment the counter
$counter++
}
$report | Format-Table VmName, ResourceGroupName, Region, VmSize, OsType, Subscription, Cores, Memory, OSDiskSize
# Specify the output file path
$outputFilePath = "C:\Users\Documents\xyz.csv"
# Export the results to a CSV file
$report | Export-Csv -Path $outputFilePath -NoTypeInformation
Write-Output "VM details have been exported to $outputFilePath"