You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure新手求助:自动化生成资源清单Excel并定时通过Outlook发送日报

Azure资源每日报告自动化方案

一、前置准备

  • 安装Azure PowerShell模块:Install-Module -Name Az -AllowClobber -Scope CurrentUser
  • 安装Excel处理模块:Install-Module -Name ImportExcel -Scope CurrentUser
  • 确保本地安装Outlook客户端并登录有权限发送邮件的账户
  • 首次运行时执行Connect-AzAccount完成Azure账户身份验证

二、核心脚本实现

编写PowerShell脚本(命名为AzureResourceReport.ps1),包含数据采集、Excel生成、邮件发送三个核心环节:

1. 数据采集与Excel生成

# 获取所有订阅并遍历
$subscriptions = Get-AzSubscription
$excelPath = "Azure资源报告_$(Get-Date -Format 'yyyyMMdd').xlsx"

foreach ($sub in $subscriptions) {
    Set-AzContext -Subscription $sub.Id | Out-Null
    
    # 遍历当前订阅下的所有资源组
    $resourceGroups = Get-AzResourceGroup
    foreach ($rg in $resourceGroups) {
        $resourceDetails = @()
        # 获取资源组内所有资源
        $resources = Get-AzResource -ResourceGroupName $rg.ResourceGroupName
        
        foreach ($res in $resources) {
            $status = $res.ProvisioningState
            $extraInfo = ""
            
            # 针对不同资源类型提取专属状态信息
            switch ($res.ResourceType) {
                "Microsoft.Storage/storageAccounts" {
                    $storage = Get-AzStorageAccount -ResourceGroupName $rg.ResourceGroupName -Name $res.Name
                    $status = $storage.ProvisioningState
                    # 若需精确已用容量,可通过Azure Monitor指标查询,此处用SKU默认容量示例
                    $extraInfo = "状态: $status, 最大容量: $($storage.Sku.CapacityGB) GB"
                }
                "Microsoft.Compute/virtualMachines" {
                    $vm = Get-AzVM -ResourceGroupName $rg.ResourceGroupName -Name $res.Name -Status
                    $status = $vm.Statuses[1].DisplayStatus
                    # 磁盘可用空间需远程获取,此处先展示基础运行状态
                    $extraInfo = "运行状态: $status, OS磁盘大小: $($vm.StorageProfile.OsDisk.DiskSizeGB) GB"
                }
                default {
                    $extraInfo = "状态: $status"
                }
            }
            
            $resourceDetails += [PSCustomObject]@{
                订阅名称 = $sub.Name
                资源组名称 = $rg.ResourceGroupName
                资源名称 = $res.Name
                资源类型 = $res.ResourceType
                详细状态 = $extraInfo
            }
        }
        
        # 将当前资源组数据导出到Excel,每个资源组对应独立工作表
        $resourceDetails | Export-Excel -Path $excelPath -WorksheetName "$($rg.ResourceGroupName)_$($sub.Name)" -AutoSize -BoldTopRow
    }
}

2. Outlook邮件发送

在脚本末尾添加以下代码实现邮件发送:

# 初始化Outlook客户端
$outlook = New-Object -ComObject Outlook.Application
$mail = $outlook.CreateItem(0)

# 配置邮件参数
$mail.To = "收件人1@domain.com;收件人2@domain.com"
$mail.Subject = "每日Azure资源报告_$(Get-Date -Format 'yyyy-MM-dd')"
$mail.Body = "附件为今日Azure资源状态汇总,请查收。"
$mail.Attachments.Add($excelPath)

# 发送邮件并清理COM对象
$mail.Send()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($mail) | Out-Null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($outlook) | Out-Null

三、定时自动化配置

通过Windows任务计划程序实现每日定时执行:

  1. 打开「任务计划程序」,点击「创建基本任务」
  2. 触发器设置:选择「每日」,分别添加9:00和18:00两个触发时间点
  3. 操作设置:选择「启动程序」,程序/脚本填powershell.exe,添加参数:-ExecutionPolicy Bypass -File "C:\Scripts\AzureResourceReport.ps1"(替换为你的实际脚本路径)
  4. 权限设置:选择有权限访问Azure和Outlook的用户账户,勾选「不管用户是否登录都要运行」

四、新手优化提示

  • 无交互登录:若需无人值守运行,可创建Azure服务主体,用Connect-AzAccount -ServicePrincipal -ApplicationId "AppID" -TenantId "TenantID" -CertificateThumbprint "Thumbprint"替代手动登录
  • 精确容量统计:存储账户实际已用容量可通过Get-AzMetric查询UsedCapacity指标,需提前启用Azure Monitor
  • VM磁盘空间:可通过PowerShell远程连接VM执行Get-Volume命令获取可用空间,需提前配置VM远程管理权限

内容的提问来源于stack exchange,提问作者tehais

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 07:15:38