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
相关产品推荐
相关产品推荐

