我正在尝试使用 PowerShell 获取我的 Azure 订阅的当前费用。
所需输出:
例如:
货币 = 英镑
当前成本= 370.74
Get-AzConsumptionUsageDetail -BillingPeriodName 202105
但这并没有给我想要的输出。
下面的查询将为您提供上述月份的费用。例如:五月的费用
Get-AzConsumptionUsageDetail -BillingPeriodName 202105
但是,如果您的订阅不是从 5 月 1 日开始,那么在这种情况下,上述查询将为您提供错误的费用。例如:您的计费周期是从 5 月 10 日到 6 月 9 日
要了解确切的计费周期的费用,您需要首先获取当前的计费周期,然后根据计费周期开始/结束日期获取费用。
$currentBillingPeriod = Get-AzBillingPeriod -MaxCount 1
$startDate = $currentBillingPeriod.BillingPeriodStartDate.ToString("dd-MM-yyyy")
Write-Host "currentBillingPeriod startDate : " $startDate
$endDate = $currentBillingPeriod.BillingPeriodEndDate.ToString("dd-MM-yyyy")
Write-Host "currentBillingPeriod endDate : " $endDate
$currentCost = Get-AzConsumptionUsageDetail -StartDate $startDate -EndDate $endDate | Measure-Object -Property PretaxCost -Sum
Write-Host "Current Cost of Subscription : " $currentCost.Sum
尝试以下 powershell 脚本:
$tenantId="76a1f773...b-86b9-d1ced3e15cda"
$clientId="0159ec7d-f...-a680-c4d40ab7a36c"
$clientSecret="o4eq4jj...I26uz26W~"
$secSecret = ConvertTo-SecureString $clientSecret -AsPlainText -Force
$pscredential = New-Object System.Management.Automation.PSCredential ($clientId, $secSecret)
Connect-AzAccount -ServicePrincipal -Credential $pscredential -Tenant $tenantId
$dexResourceUrl="https://management.azure.com/"
$context = Get-AzContext
$token = [Microsoft.Azure.Commands.Common.Authentication.AzureSession]::Instance.AuthenticationFactory.Authenticate($context.Account, $context.Environment, $context.Tenant.Id.ToString(), $null, [Microsoft.Azure.Commands.Common.Authentication.ShowDialog]::Never, $null, $dexResourceUrl).AccessToken
$SubscriptionId = '3465e081-85b6-4b54-a3e1-15675acb615f'
$billingperiod = '202010-1'
#Create the REST-URL
$usageURL ="https://management.azure.com/subscriptions/$subscriptionid/providers/Microsoft.Billing/billingPeriods/$billingperiod/providers/Microsoft.Consumption/usageDetails?api-version=2017-11-30"
$header = @{
'Authorization' = "Bearer $($token)"
"Content-Type" = "application/json"
}
$UsageData = Invoke-RestMethod `
-Method Get `
-Uri $usageURL `
-ContentType application/json `
-Headers $header
ConvertTo-Json $UsageData
你能看看这是否适合你:
AzConsumptionUsageDetail -BillingPeriodName <periodname> | Measure-Object PretaxCost -Sum
。其中期间名称的格式为 20210601
编辑:意识到我错过了你帖子中明显的内容,并且你已经尝试过 - 我将其留在这里,以防其他人仍然发现它对其他人有帮助。
Get-AzConsumptionBudget
。请参阅这篇文章,最近有人询问,在 OP 的帮助下,我们能够更接近他所需要的。
您可以为此使用 Invoke-AzCostManagementQuery cmdlet。
Invoke-AzCostManagementQuery -Scope /subscriptions/00000000-0000-0000-0000-000000000000 -Timeframe MonthToDate -Type ActualCost -DatasetGranularity 'Monthly' -DatasetAggregation @{ 'totalCost' = @{ 'name' = 'Cost' } }
Column Row
------ ---
{Cost, BillingMonth, Currency} {1.54425705929919 01 Sept 2024 00:00:00 EUR}
请注意,此 cmdlet 的参考文档有点糟糕 - 您必须转到底层 REST API 的文档才能弄清楚参数的真正含义。 https://learn.microsoft.com/en-us/rest/api/cost-management/query/usage
当您转到成本分析边栏选项卡时,Azure 门户也会使用此 API。