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

Azure存储容器.bak文件清理脚本异常:仅列文件未删除

解决Azure存储容器中旧.bak文件删除问题

我帮你排查下问题所在,你的脚本有两个核心问题导致只列出文件但未执行删除,同时还有可以优化的地方:

问题1:管道符缺失

你的Get-AzStorageBlob命令和Where-Object之间缺少了管道符(|),这导致Where-Object的筛选逻辑根本没有被执行——脚本实际上只是在遍历容器并列出所有Blob,完全没进入筛选和删除环节。

问题2:清理时间不符合需求

你设置的$CleanupTime是当前时间减1分钟,但需求是删除30天以上的文件,这里应该改为AddDays(-30)。

优化建议:改用foreach循环

原生的for循环虽然能用,但PowerShell里用foreach遍历容器列表会更简洁易读。


修正后的完整脚本

param($TimerBlob)

# 设置清理阈值:当前UTC时间往前推30天
$CleanupTime = [DateTime]::UtcNow.AddDays(-30)

# 初始化存储上下文
$context = New-AzStorageContext -StorageAccountName **** -StorageAccountKey ****

# 要遍历的容器列表
$containername = @("mydbstore", "mydbstore2","mydbstore3")

# 遍历每个容器
foreach ($container in $containername) {
    # 获取符合条件的Blob并删除
    Get-AzStorageBlob -Container $container -Context $context | 
        Where-Object { 
            $_.LastModified.UtcDateTime -lt $CleanupTime -and 
            $_.BlobType -eq "PageBlob" -and 
            $_.Name -like "*.bak"
        } | 
        Remove-AzStorageBlob -WhatIf # 先加-WhatIf测试,确认要删除的文件正确后再移除这个参数
}

测试提示

建议先在Remove-AzStorageBlob后加上-WhatIf参数,这样脚本只会输出要删除的Blob列表,不会实际执行删除操作。确认筛选结果符合预期后,再去掉-WhatIf执行真正的删除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:41:34