求助: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.
相关产品推荐
相关产品推荐

