| 12
 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
 }
 
 |