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

求助:Az Storage File脚本误删全部文件,仅需删除14天以上文件

问题分析与修复方案

你的脚本之所以会删除所有文件,核心问题是**lastModified的格式处理错误**:az storage file list返回的lastModified是字符串类型(比如"2024-05-01T10:00:00Z"),你直接访问它的.DateTime属性会得到$null,而$null -lt 任何日期的结果都是$true,导致所有文件都被误判为超过14天的旧文件。

另外注意PowerShell变量名区分大小写,脚本中$shareName和$sharename的大小写不一致,虽然可能不影响删除操作,但容易引发其他问题,建议统一。

修复后的脚本

$accountName = "accountname"
$accountKey = "key"
$shareName = "share"

# 统一变量大小写,避免歧义
$filelist = az storage file list --exclude-dir -s $shareName --account-name $accountName --account-key $accountKey
$fileArray = $filelist | ConvertFrom-Json

# 正确转换lastModified为DateTime对象,同时考虑UTC时区(Azure存储返回的是UTC时间)
$cutoffDate = (Get-Date).ToUniversalTime().AddDays(-14)
foreach ($file in $fileArray | Where-Object { [DateTime]::Parse($_.properties.lastModified) -lt $cutoffDate }) {
    $removefile = $file.name
    Write-Host "Removing file $removefile"
    az storage file delete --share-name $shareName --account-Name $accountName --account-Key $accountKey -p $removefile
}

关键修正点

  • 修复日期比较逻辑:用[DateTime]::Parse()将lastModified字符串转换为DateTime对象,再和计算好的截止日期比较
  • 时区对齐:将本地时间转换为UTC时间后计算截止日期,匹配Azure存储返回的UTC格式时间,避免因时区差异导致的误删/漏删
  • 统一变量大小写:将$sharename改为$shareName,符合PowerShell变量命名规范
  • 简化冗余判断:去掉if ($removefile -ne $null),因为--exclude-dir已经确保返回的都是文件,$file.name不会为空

内容的提问来源于stack exchange,提问作者D. de W.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 01:47:20