Azure EA Billing Data Export to CSV

This uses the new API downloading data from the new URL

Credit goes to the script based on the old API found at

Requres 5 mandatory parameters:

Your unique EA enrollment number

Your API key, obtain from the EA portal. NOTE: These expire every 6 months

Full path to CSV file to export the data to

Use format yyyy-MM-dd (example 2019-01-13)

Use format yyyy-MM-dd (example 2019-01-15)

Please feel free to download, use and modify as you wish, any questions drop them in Q and A.

NOTE: Only tested on Windows Server 2016.

#// Script Name: Azure_EA_Billing_Export.ps1 
#// Author: Ian Kennon 
#// Credits: Based on the original excellent script, which used the now depreciated API 
#// Script Usage: 
#//    To create export EA billing data to CSV 
#//    Pass all mandatory parameters: 
#//        -EnrollmentNbr    -    Your unique EA enrollment number 
#//        -Key        -    Your API key, obtain from the EA portal. NOTE: These expire every 6 months 
#//        -CsvFile    -    Full path to CSV file to export the data to 
#//        -startDate    -    Use format yyyy-MM-dd (example 2019-01-13) 
#//        -endDate    -    Use format yyyy-MM-dd (example 2019-01-15) 
#//    Optional - Remove unwanted columns from data by editing where indicated in the script below 
#// Script Dependencies: 
#//    Valid Azure EA enrollment number and API key 
#// Script Version History: 
#//    v0.1    15 Jan 2019    First revision 
#// Start of Script 
#// Get Parameters 
#// Set variables 
$AccessToken = "Bearer $Key" 
$urlbase = '' 
#// function to invoke the api, download the data, import it, and merge it to the global array 
Function DownloadUsageReport( [string]$LinkToDownloadDetailReport$csvAll ) { 
    $webClient = New-Object System.Net.WebClient 
    $data = $webClient.DownloadString("$urlbase/$LinkToDownloadDetailReport") 
    $csvAll = $data 
    return $csvAll 
#// Get new data 
Write-Output "INFO: Downloading usage data for date: $StartDate to: $EndDate" 
$csvAll = DownloadUsageReport "/$EnrollmentNbr/usagedetails/download?startTime=$StartDate&endTime=$endDate" $csvAll 
#// Check data returned 
if (!$csvAll) { 
    Write-Output "ERROR: No data found" 
#// Remove top of result for CSV format 
$NewData = "AccountId,"+($csvAll -split "AccountId," | Select -Last 1) 
#// Convert from CSV into an ps variable 
$csvAll = ($NewData | ConvertFrom-CSV) 
#// Show the number of rows found 
Write-Output "INFO: Total Rows Found = $($csvAll.length)" 
#// Optional - Remove unwanted columns here if required. Uncomment and amend properties to exclude 
#// Remove unwanted columns from data 
#Write-Output "INFO: Removing unwanted columns from data" 
#$csvAll = $csvAll | Select-Object -Property * -ExcludeProperty 'AccountId', 'AccountName', 'AccountOwnerEmail', 'AdditionalInfo', 'Consumed ServiceId', 'CostCenter', 'DepartmentId', 'DepartmentName', 'ExtendedCostCenter', 'ProductId', 'Resource LocationId', 'ServiceAdministratorId', 'ServiceInfo1', 'ServiceInfo2', 'StoreServiceIdentifier', 'SubscriptionId', 'PartNumber', 'ResourceGuid', 'OfferId', 'ChargesBilledSeparately', 'Location', 'ServiceName', 'ServiceTier' 
Write-Output "INFO: Processing data, please wait..." 
#// Set progress bar variables  
$tot = $csvAll.length 
for ($i=0; $i -lt $csvAll.length; $i++) { 
    #// Set up progress bar  
    $status = "{0:N0}" -f ($a / $tot * 100)  
    Write-Progress -Activity "Exporting Costs" -status "Processing row $a of $tot : $status% Completed" -PercentComplete ($a / $tot * 100)  
    #// Fix data types 
    $csvAll[$i].Date = [datetime]::Parse($csvAll[$i].Date).ToString("d") 
    $csvAll[$i].Cost = [float]$csvAll[$i].Cost 
    $csvAll[$i].ResourceRate = [float]$csvAll[$i].ResourceRate 
    $csvAll[$i].ConsumedQuantity = [float]$csvAll[$i].ConsumedQuantity 
#// Sort array by date 
$csvAll = $csvAll | Sort Date 
#// save the data to an Excel file 
$csvAll | Export-Csv -Path $CsvFile -NoTypeInformation 
#// Release PowerShell memory 
#// End of Script 

Be the first to comment

Leave a Reply

Your email address will not be published.