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任务计划程序实现每日定时执行:
- 打开「任务计划程序」,点击「创建基本任务」
- 触发器设置:选择「每日」,分别添加9:00和18:00两个触发时间点
- 操作设置:选择「启动程序」,程序/脚本填
powershell.exe,添加参数:-ExecutionPolicy Bypass -File "C:\Scripts\AzureResourceReport.ps1"(替换为你的实际脚本路径) - 权限设置:选择有权限访问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
相关产品推荐
相关产品推荐

