概述
管理 Azure 中未使用或孤立的资源会对云支出和运营效率产生重大影响。“Azure Resource Cleanup”工具是一个全面的 PowerShell 脚本,旨在帮助云管理员识别并删除未使用或孤立的 Azure 资源,确保成本优化和资源管理改善。
此脚本默认在安全、非破坏性的报告模式下运行,让管理员可以在启动清理操作之前查看孤立的资源。
你可以在 GitHub 上访问该项目:AzureOpsScripts – Resource Cleanup。
目录
主要功能
Azure Resource Cleanup 脚本提供以下功能:
- 孤立的 NIC:识别未附加到任何 VM 或端点的网络接口。
- 旧的 Azure 磁盘快照:检测超出保留期的快照。
- 存储帐户 Blob 快照:标记超过定义保留期的 Blob 快照。
- 文件共享快照:识别超出保留限制的文件共享快照。
- 孤立的托管磁盘:查找未附加到任何 VM 的磁盘。
- 孤立的公共 IP:定位未使用的公共 IP 地址。
- 未使用的网络安全组:识别未与任何资源关联的 NSG。
- 未使用的可用性集:检测不再使用的可用性集。
- 空资源组:标记没有活动资源的资源组。
- 未使用的虚拟网络:突出显示可能未使用的虚拟网络(仅作突出显示,脚本不会删除它)。
- 已保留但未使用的 IP 地址:识别已保留但未实际分配的 IP 地址。
要求
要使用 Azure Resource Cleanup 脚本,请确保满足以下前提条件:
- PowerShell 版本:5.1 或更高版本
- Az PowerShell 模块:使用以下命令安装:
Install-Module -Name Az - Azure 帐户权限:确保具有查看和删除资源的适当权限。
用法
报告模式
在报告模式下运行脚本,以生成孤立资源的详细报告:
.\Azure-Resource-Cleanup.ps1

清理模式
要删除已识别的资源,请使用清理模式:
.\Azure-Resource-Cleanup.ps1 -DeleteResources
自定义快照保留期
指定快照保留天数,以识别需要清理的旧快照:
.\Azure-Resource-Cleanup.ps1 -SnapshotRetentionDays 7 -DeleteResources

排除存储快照检查
对于大型环境,跳过存储帐户 Blob 和文件共享快照检查:
.\Azure-Resource-Cleanup.ps1 -IncludeStorageSnapshots:$false
重要说明
在允许的虚拟网络上运行
确保脚本在允许的虚拟网络内执行。由于网络限制,某些存储帐户可能会禁止访问容器或文件快照。如果存储帐户不支持删除操作,尝试清理这些资源时可能会遇到错误。
在开发/测试环境中测试
强烈建议在开发或测试环境中测试脚本,然后再在生产环境中使用。这样可以让你查看脚本的行为、识别潜在问题,并验证标记为清理的资源。
使用仅报告模式
对于生产环境,始终先在仅报告模式(不带-DeleteResources参数)下运行脚本。这会提供孤立资源的详细报告,让你可以在启动清理操作之前查看和验证标记的项目。
参数
该脚本支持多个可自定义的参数:
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
SnapshotRetentionDays | Integer | 3 | 快照的保留期(以天为单位)。超过此期限的快照将被标记为清理对象。 |
DeleteResources | Switch | $false | 启用删除已识别的资源。默认情况下,脚本仅生成报告。 |
IncludeStorageSnapshots | Switch | $true | 包括 Blob 和文件共享快照检查。设置为$false可排除这些检查。 |
报告输出
该脚本在带时间戳的文件夹中生成详细报告,包括:
orphaned_nics.csvold_managed_snapshots.csvold_blob_snapshots.csvold_fileshare_snapshots.csvorphaned_disks.csvorphaned_public_ips.csvorphaned_nsgs.csvunused_availability_sets.csvempty_resource_groups.csvunused_vnets.csvsubnet_ip_usage.csvcleanup_log.txt(所执行操作的完整日志)
最佳实践
- 从报告模式开始:始终在不带
-DeleteResources参数的情况下运行脚本,以查看标记的资源。 - 查看报告:在启动清理操作之前,仔细分析生成的 CSV 文件。
- 设置保留期:根据组织策略自定义快照保留期。
- 在非生产环境中测试:在生产环境中使用之前,先在开发/测试环境中运行脚本以验证其行为。
- 在允许的虚拟网络上运行:确保脚本在允许的 vNet 内执行,以避免存储帐户清理时出现网络相关错误。
示例工作流
按照以下工作流安全地清理 Azure 资源:
- 在报告模式下运行脚本:
.\Azure-Resource-Cleanup.ps1 - 查看生成的报告,找出标记的资源。
- 放心地继续使用清理模式:
.\Azure-Resource-Cleanup.ps1 -DeleteResources