如何使用 PowerShell 获取 Azure 订阅的当前成本

How to get the azure subscription current cost using PowerShell

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

期望的输出:

例如:

货币=英镑

当前成本 = 370.74

Get-AzConsumptionUsageDetail -BillingPeriodName 202105

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

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

来源:

你能看看这对你有用吗:

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

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

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

最近在 OP 的帮助下,我们能够更接近他的需求。

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

Get-AzConsumptionUsageDetail -BillingPeriodName 202105

但是,如果您的订阅不是从 5 月 1 日开始的,那么在这种情况下,上述查询将为您提供错误的费用。例如:您的结算周期是从 5 月 10 日到 6 月 9 日

要了解您的确切计费周期的费用,您需要先获取当前计费周期,然后根据计费周期 start/end 日期获取费用。

$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