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

如何用PowerShell获取Azure资源修改时间并自动化清理闲置资源

Azure资源生命周期自动化脚本(90天未活跃资源清理+活跃资源统计)

核心PowerShell脚本

注意:请确保已安装并切换至Azure Az模块(AzureRm已被官方弃用,建议升级),执行前先通过Connect-AzAccount完成身份验证。

# 定义时间阈值:90天前
$thresholdDate = (Get-Date).AddDays(-90)

# 获取订阅下所有资源
$allResources = Get-AzResource

# 初始化结果数组
$activeResources = @()
$inactiveResources = @()

foreach ($resource in $allResources) {
    # 获取该资源最近的活动日志(限制返回1条最新记录)
    $latestActivity = Get-AzLog -ResourceId $resource.ResourceId -MaxEvents 1 -WarningAction SilentlyContinue

    if ($latestActivity) {
        $lastActivityDate = $latestActivity.EventTimestamp
        # 判断是否在90天内有活动
        if ($lastActivityDate -ge $thresholdDate) {
            $activeResources += [PSCustomObject]@{
                ResourceName = $resource.Name
                ResourceId = $resource.ResourceId
                LastModifiedTime = $lastActivityDate
                ResourceType = $resource.ResourceType
            }
        } else {
            $inactiveResources += $resource
        }
    } else {
        # 无日志记录的资源视为未活跃
        $inactiveResources += $resource
    }
}

# 输出活跃资源信息到CSV文件
$activeResources | Export-Csv -Path "ActiveAzureResources_$(Get-Date -Format 'yyyyMMdd').csv" -NoTypeInformation -Encoding UTF8

# 输出待处理的未活跃资源信息到CSV文件
$inactiveResources | Select-Object Name, ResourceId, ResourceType, Location | Export-Csv -Path "InactiveAzureResources_$(Get-Date -Format 'yyyyMMdd').csv" -NoTypeInformation -Encoding UTF8

# 控制台输出统计结果
Write-Host "=== 统计结果 ==="
Write-Host "活跃资源数量: $($activeResources.Count)"
Write-Host "90天未活跃资源数量: $($inactiveResources.Count)"
Write-Host "活跃资源详情已导出至: ActiveAzureResources_$(Get-Date -Format 'yyyyMMdd').csv"
Write-Host "待处理资源详情已导出至: InactiveAzureResources_$(Get-Date -Format 'yyyyMMdd').csv"

脚本扩展:批量处理未活跃资源

如果需要直接对未活跃资源执行弃用/迁移操作,可在上述脚本末尾添加以下逻辑(请务必先测试,确认无误后再执行):

# 示例:标记未活跃资源为删除(仅演示,实际操作请替换为你的弃用/迁移逻辑)
foreach ($inactiveResource in $inactiveResources) {
    Write-Host "标记资源 $($inactiveResource.Name) 待删除..."
    # 执行删除操作(注释掉的是实际命令,取消注释前请确认)
    # Remove-AzResource -ResourceId $inactiveResource.ResourceId -Force
}

自动执行配置(每15天运行一次)

方案1:Windows任务计划

  1. 将脚本保存为AzureResourceCleanup.ps1
  2. 创建新任务,设置触发器为"每15天",选择合适的执行时间
  3. 操作设置为启动程序,程序/脚本选择powershell.exe,添加参数:
    -ExecutionPolicy Bypass -File "C:\Scripts\AzureResourceCleanup.ps1"
    
  4. 配置任务运行的账户需具备Azure订阅的资源参与者或更高权限,且已通过Save-AzContext保存持久化登录上下文

方案2:Azure Automation Runbook

  1. 在Azure门户创建Automation账户,导入Az模块
  2. 创建PowerShell Runbook,粘贴上述核心脚本
  3. 添加计划触发器,设置为每15天执行一次
  4. 为Automation账户分配具备相应权限的托管身份,避免手动登录

注意事项

  • 权限要求:执行脚本的账户需要Microsoft.Insights/logs/read和Microsoft.Resources/resources/read权限,若需删除资源则需Microsoft.Resources/resources/delete权限
  • 日志可用性:部分Azure资源的活动日志可能仅保留90天内的记录,无日志的资源会被判定为未活跃,请根据实际场景调整逻辑
  • 测试优先:在批量执行删除/迁移操作前,务必先通过导出的CSV文件验证未活跃资源列表,避免误删关键资源
  • Az模块升级:若仍在使用AzureRm模块,可将脚本中的Get-Az*替换为Get-AzureRm*,但强烈建议升级至Az模块以获得官方支持

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 21:10:52