如何使用 PowerShell 获取 azure 订阅当前费用

问题描述 投票:0回答:4

我正在尝试使用 PowerShell 获取我的 Azure 订阅的当前费用。 enter image description here

所需输出:

例如:

货币 = 英镑

当前成本= 370.74

Get-AzConsumptionUsageDetail -BillingPeriodName 202105

但这并没有给我想要的输出。

azure powershell azure-powershell subscription
4个回答
5
投票

下面的查询将为您提供上述月份的费用。例如:五月的费用

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

3
投票

尝试以下 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

来源:https://stackoverflow.com/a/63353164/1384539


1
投票

你能看看这是否适合你:

  1. 尝试
    AzConsumptionUsageDetail  -BillingPeriodName <periodname>  | Measure-Object PretaxCost -Sum
    。其中期间名称的格式为
    20210601

编辑:意识到我错过了你帖子中明显的内容,并且你已经尝试过 - 我将其留在这里,以防其他人仍然发现它对其他人有帮助。

  1. 否则为所有订阅设置预算,然后使用
    Get-AzConsumptionBudget

请参阅这篇文章,最近有人询问,在 OP 的帮助下,我们能够更接近他所需要的。


0
投票

您可以为此使用 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。

© www.soinside.com 2019 - 2024. All rights reserved.