PowerShell 技能连载 - Azure多云成本优化实践
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| function Get-AzureCostAnalysis { [CmdletBinding()] param( [Parameter(Mandatory=$true)] [string[]]$SubscriptionIds, [datetime]$StartDate = (Get-Date).AddDays(-30) )
$report = [PSCustomObject]@{ Timestamp = Get-Date -Format 'yyyy-MM-dd HH:mm:ss' ResourceAnalysis = @() CostRecommendations = @() }
foreach ($subId in $SubscriptionIds) { Set-AzContext -SubscriptionId $subId | Out-Null $resources = Get-AzResource | Where-Object { $_.ResourceType -notin @('Microsoft.Resources/deployments','Microsoft.Resources/subscriptions') }
$resourceGroups = $resources | Group-Object ResourceGroupName foreach ($rg in $resourceGroups) { $costData = Get-AzConsumptionUsageDetail -StartDate $StartDate -EndDate (Get-Date) -ResourceGroup $rg.Name $report.ResourceAnalysis += [PSCustomObject]@{ Subscription = $subId ResourceGroup = $rg.Name TotalCost = ($costData | Measure-Object PretaxCost -Sum).Sum UnderutilizedVMs = $rg.Group.Where{ $_.ResourceType -eq 'Microsoft.Compute/virtualMachines' }.Count } } }
$report.ResourceAnalysis | ForEach-Object { if ($_.UnderutilizedVMs -gt 5) { $report.CostRecommendations += [PSCustomObject]@{ Recommendation = "调整资源组 $($_.ResourceGroup) 中未充分利用的VM规模" PotentialSavings = "预计节省 $([math]::Round($_.TotalCost * 0.3)) 美元" } } }
$report | Export-Excel -Path "$env:TEMP/AzureCostReport_$(Get-Date -Format yyyyMMdd).xlsx" return $report }
|
核心功能:
- 跨订阅资源消耗分析
- 闲置VM资源自动识别
- 成本节约潜力预测
- Excel报告自动生成
典型应用场景:
- 企业多云成本可视化管理
- FinOps实践中的资源优化
- 预算执行情况跟踪
- 云服务商比价数据支持