Get Azure Virtual Machine Inventory along last X days of CPU, Memory & Cost Data using Azure PowerShell
$azureServicePrincipalId= “”
$azureServicePrincipalSecret=””
$tenandId=””
$dataForLastXDays = “”
$azureServicePrincipalSecretSecureString=ConvertTo-SecureString $azureServicePrincipalSecret -AsPlainText -Force -Verbose
$azureCredentail= New-Object System.Management.Automation.PSCredential ($azureServicePrincipalId, $azureServicePrincipalSecretSecureString)
Connect-AzAccount -ServicePrincipal -Tenant $tenandId -Credential $azureCredentail -verbose
$subscriptionList = Get-AzSubscription -TenantId $tenantid
“ResourceName, ResourceGroupName, location, PricingTier, ResourceCost , UsageMonth, ApplicationName, EnvironmentName, subscriptionName,DiskType,OsType,NumberOfCores,MemoryInMB,AverageCpuUtilization,AverageMemoryUtilization,ResourceId” | Out-File -FilePath “$env:HOMEPATH\Documents\AzureVirtualMachineCost.csv” -Append -Encoding utf8
foreach ($subscription in $subscriptionList) {
$SelectSubscription = Select-AzSubscription -Subscription $subscription
$subscriptionName = $SelectSubscription.Subscription.Name
$azureVirtualMachineList = Get-AzVM | Select-Object Name, ResourceGroupName, Location, id, @{“Name” = “Size”; Expression = { $_.HardwareProfile.VmSize } }, @{“Name” = “DiskType”; Expression = { $_.storageProfile.osDisk.managedDisk.storageAccountType } },@{“Name” = “OSType”; Expression = { $_.storageProfile.osDisk.osType } }, @{“Name” = “ApplicationName”; Expression = { $_.Tags.’APPLICATION NAME’ } }, @{“Name” = “EnvironmentName”; Expression = { $_.Tags.’ENVIRONMENT NAME’ } }
foreach ($azureVirtualMachine in $azureVirtualMachineList) {
$ResourceName = $azureVirtualMachine.Name
$ResourceGroupName = $azureVirtualMachine.ResourceGroupName
$location = $azureVirtualMachine.Location
$PricingTier = $azureVirtualMachine.Size
$ApplicationName = $azureVirtualMachine.ApplicationName
$EnvironmentName = $azureVirtualMachine.EnvironmentName
$DiskType = $azureVirtualMachine.DiskType
$OSType = $azureVirtualMachine.OSType
$ResourceId = $azureVirtualMachine.id
$GetVMSizeDetails = Get-AzVMSize -VMName $ResourceName -ResourceGroupName $ResourceGroupName | where { $_.Name -eq $PricingTier }
$NumberOfCores = $GetVMSizeDetails.NumberOfCores
$MemoryInMB = $GetVMSizeDetails.MemoryInMB
$days = “$dataForLastXDays”
$startDate = [datetime]::Today.AddDays($days)
$endDate = [datetime]::Today
$cpuUtilization_Average = 0.0
$cpuUtilization = Get-AzMetric -ResourceId $ResourceId -MetricName “Percentage CPU” -DetailedOutput -StartTime $startDate -EndTime $endDate -TimeGrain 12:00:00 -WarningAction SilentlyContinue
$cpuUtilization_Average = [System.Math]::Round($(($cpuUtilization.Data.Average | Measure-Object -Average).Average), 2)
$memoryUtilization_Average = 0.0
$memoryUtilization = Get-AzMetric -ResourceId $ResourceId -MetricName “Available Memory Bytes” -DetailedOutput -StartTime $startDate -EndTime $endDate -TimeGrain 12:00:00 -WarningAction SilentlyContinue
$memoryUtilization_Average = [System.Math]::Round($(($MemoryInMB — (($memoryUtilization.Data.Average | Measure-Object -Average).Average / 1MB)) / $MemoryInMB * 100), 2)
$month = “-1”
$UsageMonth = [datetime]::Today.AddMonths($month).ToString(‘MMM-yyyy’)
$CurrentBillPeriod = [datetime]::Today.AddMonths($month).ToString(‘yyyyMM’)
$ResourceUsage = Get-AzConsumptionUsageDetail -InstanceName $ResourceName -Expand MeterDetails -BillingPeriodName $CurrentBillPeriod
$ResourceCost = 0
foreach ($Usage in $ResourceUsage) {
$ResourceCost += $Usage.PretaxCost
}
Write-Host “$ResourceName, $ResourceGroupName, $location, $PricingTier, $ResourceCost , $UsageMonth, $ApplicationName,$EnvironmentName,$subscriptionName,$DiskType,$OSType,$NumberOfCores,$MemoryInMB,$cpuUtilization_Average,$memoryUtilization_Average,$ResourceId” -f Green
“$ResourceName, $ResourceGroupName, $location, $PricingTier, $ResourceCost , $UsageMonth, $ApplicationName,$EnvironmentName,$subscriptionName,$DiskType,$OSType,$NumberOfCores,$MemoryInMB,$cpuUtilization_Average,$memoryUtilization_Average,$ResourceId” | Out-File -FilePath “$env:HOMEPATH\Documents\AzureVirtualMachineCost.csv” -Append -Encoding utf8
}
}