Usage/Usagesummary.ps1 (156 lines of code) (raw):
<#
.Synopsis
Exports usage meters from Azure Stack to a csv file
.DESCRIPTION
Long description
#>
Param
(
[Parameter(Mandatory = $true)]
[datetime]
$StartTime,
[Parameter(Mandatory = $true)]
[datetime]
$EndTime ,
[Parameter(Mandatory = $false)]
[ValidateSet("Hourly", "Daily")]
[String]
$Granularity = 'Daily',
[Parameter(Mandatory = $false)]
[String]
$CsvFile = "UsageSummary.csv",
[Parameter(Mandatory = $false)]
[Switch]
$Force
)
#Initialise meter hashtable
$meters = @{
'578ae51d-4ef9-42f9-85ae-42b52d3d83ac' = 'ActualPremiumSnapshotSize Unit: GB*month'
'108fa95b-be0d-4cd9-96e8-5b0d59505df1' = 'ActualStandardSnapshotSize Unit: GB*month'
'Custom Worker Tiers' = 'Custom Worker Tiers Unit: Hours'
'F271A8A388C44D93956A063E1D2FA80B' = 'Static IP Address Usage'
'9E2739BA86744796B465F64674B822BA' = 'Dynamic IP Address Usage'
'B4438D5D-453B-4EE1-B42A-DC72E377F1E4' = 'TableCapacity'
'B5C15376-6C94-4FDD-B655-1A69D138ACA3' = 'PageBlobCapacity'
'B03C6AE7-B080-4BFA-84A3-22C800F315C6' = 'QueueCapacity'
'09F8879E-87E9-4305-A572-4B7BE209F857' = 'BlockBlobCapacity'
'B9FF3CD0-28AA-4762-84BB-FF8FBAEA6A90' = 'TableTransactions'
'50A1AEAF-8ECA-48A0-8973-A5B3077FEE0D' = 'TableDataTransIn'
'1B8C1DEC-EE42-414B-AA36-6229CF199370' = 'TableDataTransOut'
'43DAF82B-4618-444A-B994-40C23F7CD438' = 'BlobTransactions'
'9764F92C-E44A-498E-8DC1-AAD66587A810' = 'BlobDataTransIn'
'3023FEF4-ECA5-4D7B-87B3-CFBC061931E8' = 'BlobDataTransOut'
'EB43DD12-1AA6-4C4B-872C-FAF15A6785EA' = 'QueueTransactions'
'E518E809-E369-4A45-9274-2017B29FFF25' = 'QueueDataTransIn'
'DD0A10BA-A5D6-4CB6-88C0-7D585CEF9FC2' = 'QueueDataTransOut'
'FAB6EB84-500B-4A09-A8CA-7358F8BBAEA5' = 'Base VM Size Hours'
'9CD92D4C-BAFD-4492-B278-BEDC2DE8232A' = 'Windows VM Size Hours'
'6DAB500F-A4FD-49C4-956D-229BB9C8C793' = 'VM size hours'
'190c935e-9ada-48ff-9ab8-56ea1cf9adaa' = 'App Service Virtual core hours'
'957e9f36-2c14-45a1-b6a1-1723ef71a01d' = 'Shared App Service Hours'
'539cdec7-b4f5-49f6-aac4-1f15cff0eda9' = 'Free App Service Hours'
'db658d61-ef2d-4888-9843-72f5c774fd3c' = 'Small Basic App Service Hours'
'27b01104-e0df-4f30-a171-f1b00ecb76b3' = 'Medium Basic App Service Hours'
'50db6a92-5dff-4c9b-8238-8ea5fb1be107' = 'Large Basic App Service Hours'
'88039d51-a206-3a89-e9de-c5117e2d10a6' = 'Small Standard App Service Hours'
'83a2a13e-4788-78dd-5d55-2831b68ed825' = 'Medium Standard App Service Hours'
'1083b9db-e9bb-24be-a5e9-d6fdd0ddefe6' = 'Large Standard App Service Hours'
'26bd6580-c3bd-4e7e-8092-58b28eb1bb94' = 'Small Premium App Service Hours'
'a1cba406-e83e-45c3-bd36-485191c215d9' = 'Medium Premium App Service Hours'
'a2104a9d-5a78-4f8f-a2df-034bd43d602d' = 'Large Premium App Service Hours'
'a91eed6c-dbbc-4532-859c-86de776433a4' = 'Extra Large Premium App Service Hours'
'73215a6c-fa54-4284-b9c1-7e8ec871cc5b' = 'Web Process'
'5887d39b-0253-4e12-83c7-03e1a93dffd9' = 'External Egress Bandwidth'
'264acb47-ad38-47f8-add3-47f01dc4f473' = 'SNI SSL'
'60b42d72-dc1c-472c-9895-6c516277edb4' = 'IP SSL'
'd1d04836-075c-4f27-bf65-0a1130ec60ed' = 'Functions Compute'
'67cc4afc-0691-48e1-a4b8-d744d1fedbde' = 'Functions Requests'
'CBCFEF9A-B91F-4597-A4D3-01FE334BED82' = 'DatabaseSizeHourSqlMeter'
'E6D8CFCD-7734-495E-B1CC-5AB0B9C24BD3' = 'DatabaseSizeHourMySqlMeter'
'EBF13B9F-B3EA-46FE-BF54-396E93D48AB4' = 'Key Vault transactions'
'2C354225-B2FE-42E5-AD89-14F0EA302C87' = 'Advanced keys transactions'
'380874f9-300c-48e0-95a0-d2d9a21ade8f' = 'Managed Disk S4 (Disk * Month)'
'1b77d90f-427b-4435-b4f1-d78adec53222' = 'Managed Disk S6 (Disk * Month)'
'd5f7731b-f639-404a-89d0-e46186e22c8d' = 'Managed Disk S10 (Disk * Month)'
'ff85ef31-da5b-4eac-95dd-a69d6f97b18a' = 'Managed Disk S15 (Disk * Month)'
'88ea9228-457a-4091-adc9-ad5194f30b6e' = 'Managed Disk S20 (Disk * Month)'
'5b1db88a-8596-4002-8052-347947c26940' = 'Managed Disk S30 (Disk * Month)'
'14496322-39cb-4d33-b67d-39b0c2de0c8e' = 'Managed Disk S40 (Disk * Month)'
'8c003d25-afb4-4f21-b1fa-86a5b0f001c7' = 'Managed Disk S50 (Disk * Month)'
'7660b45b-b29d-49cb-b816-59f30fbab011' = 'Managed Disk P4 (Disk * Month)'
'817007fd-a077-477f-bc01-b876f27205fd' = 'Managed Disk P6 (Disk * Month)'
'e554b6bc-96cd-4938-a5b5-0da990278519' = 'Managed Disk P10 (Disk * Month)'
'cdc0f53a-62a9-4472-a06c-e99a23b02907' = 'Managed Disk P15 (Disk * Month)'
'b9cb2d1a-84c2-4275-aa8b-70d2145d59aa' = 'Managed Disk P20 (Disk * Month)'
'06bde724-9f94-43c0-84c3-d0fc54538369' = 'Managed Disk P30 (Disk * Month)'
'eecb2657-e7e6-47f9-9b00-7f58fa8839cb' = 'Managed Disk P40 (Disk * Month)'
'43626c21-849b-40fe-8c01-e19666059c38' = 'Managed Disk P50 (Disk * Month)'
'7ba084ec-ef9c-4d64-a179-7732c6cb5e28' = 'Managed Disk ActualStandardDiskSize (GB * Month)'
'daef389a-06e5-4684-a7f7-8813d9f792d5' = 'Managed Disk ActualPremiumDiskSize (GB * Month)'
'75d4b707-1027-4403-9986-6ec7c05579c8' = 'Managed Disk ActualStandardSnapshotSize (GB * Month)'
'5ca1cbb9-6f14-4e76-8be8-1ca91547965e' = 'Managed Disk ActualPremiumSnapshotSize (GB * Month)'
'5d76e09f-4567-452a-94cc-7d1f097761f0' = 'Managed Disk S4 (Disk * Hour) (Deprecated)'
'dc9fc6a9-0782-432a-b8dc-978130457494' = 'Managed Disk S6 (Disk * Hour) (Deprecated)'
'e5572fce-9f58-49d7-840c-b168c0f01fff' = 'Managed Disk S10 (Disk * Hour) (Deprecated)'
'9a8caedd-1195-4cd5-80b4-a4c22f9302b8' = 'Managed Disk S15 (Disk * Hour) (Deprecated)'
'5938f8da-0ecd-4c48-8d5a-c7c6c23546be' = 'Managed Disk S20 (Disk * Hour) (Deprecated)'
'7705a158-bd8b-4b2b-b4c2-0782343b81e6' = 'Managed Disk S30 (Disk * Hour) (Deprecated)'
'd9aac1eb-a5d1-42f2-b617-9e3ea94fed88' = 'Managed Disk S40 (Disk * Hour) (Deprecated)'
'a54899dd-458e-4a40-9abd-f57cafd936a7' = 'Managed Disk S50 (Disk * Hour) (Deprecated)'
'5c105f5f-cbdf-435c-b49b-3c7174856dcc' = 'Managed Disk P4 (Disk * Hour) (Deprecated)'
'518b412b-1927-4f25-985f-4aea24e55c4f' = 'Managed Disk P6 (Disk * Hour) (Deprecated)'
'5cfb1fed-0902-49e3-8217-9add946fd624' = 'Managed Disk P10 (Disk * Hour) (Deprecated)'
'8de91c94-f740-4d9a-b665-bd5974fa08d4' = 'Managed Disk P15 (Disk * Hour) (Deprecated)'
'c7e7839c-293b-4761-ae4c-848eda91130b' = 'Managed Disk P20 (Disk * Hour) (Deprecated)'
'9f502103-adf4-4488-b494-456c95d23a9f' = 'Managed Disk P30 (Disk * Hour) (Deprecated)'
'043757fc-049f-4e8b-8379-45bb203c36b1' = 'Managed Disk P40 (Disk * Hour) (Deprecated)'
'c0342c6f-810b-4942-85d3-6eaa561b6570' = 'Managed Disk P50 (Disk * Hour) (Deprecated)'
'8a409390-1913-40ae-917b-08d0f16f3c38' = 'Managed Disk ActualStandardDiskSize (Byte * Hour) (Deprecated)'
'1273b16f-8458-4c34-8ce2-a515de551ef6' = 'Managed Disk ActualPremiumDiskSize (Byte * Hour) (Deprecated)'
'89009682-df7f-44fe-aeb1-63fba3ddbf4c' = 'Managed Disk ActualStandardSnapshotSize (Byte * Hour) (Deprecated)'
'95b0c03f-8a82-4524-8961-ccfbf575f536' = 'Managed Disk ActualPremiumSnapshotSize (Byte * Hour) (Deprecated)'
}
#Build a subscription hashtable
$subtable = New-Object System.Collections.ArrayList
$subs = Get-AzsUserSubscription
foreach ($subentry in $subs) {
[void]($subtable.Add([pscustomobject] @{
SubscriptionId = $subentry.SubscriptionId
Owner = $subentry.Owner
DisplayName = $subentry.DisplayName
}
)
)
}
$usageSummary = New-Object System.Collections.ArrayList
foreach ($subID in $subtable) {
Write-Host "Retrieving SubscriptionID $($subID.SubscriptionId)" -ForegroundColor Yellow
$result = Get-AzsSubscriberUsage -SubscriberId $subID.SubscriptionId -ReportedStartTime ("{0:yyyy-MM-ddT00:00:00.00Z}" -f $StartTime) -ReportedEndTime ("{0:yyyy-MM-ddT00:00:00.00Z}" -f $EndTime) -AggregationGranularity $Granularity
foreach ($entry in $result) {
$resourceInfo = ($entry.InstanceData | ConvertFrom-Json).'Microsoft.Resources'
$resourceText = $resourceInfo.resourceUri
$subscription = $resourceText.Split('/')[2]
$resourceType = $resourceText.Split('/')[7]
$resourceGroup = $resourceText.Split('/')[4]
$resourceName = $resourceText.Split('/')[8]
[void]($usageSummary.Add([pscustomobject] @{
UsageStartTime = $entry.UsageStartTime
UsageEndTime = $entry.UsageEndTime
MeterName = $meters[$entry.MeterId]
Quantity = $entry.Quantity
resourceType = $resourceType
location = $resourceInfo.location
resourceGroup = $resourceGroup
resourceName = $resourceName
subowner = $subID.Owner
tags = $resourceInfo.tags
MeterId = $entry.MeterId
additionalInfo = $resourceInfo.additionalInfo
subscription = $subscription
resourceUri = $resourceText
}
)
)
}
}
$usageSummary | Export-Csv -Path $CsvFile -NoTypeInformation