PowerShell日志写入异常排查:文件删除日志记录不符问题
问题根源与修正方案
问题出在哪?
- 错误使用
$error变量:$error是PowerShell的自动变量,存储的是当前会话中产生的所有错误对象,和是否有文件被删除没有直接关联。哪怕文件删除成功,只要会话中存在过错误(比如之前操作的残留错误),$error就不为空,导致始终触发“无文件”的日志分支。 - 脚本存在拼写/格式错误:
gat-date是拼写错误,正确命令为Get-Date- 路径
D\TEST缺少冒号,正确路径应为D:\TEST
修正后的脚本逻辑
正确的做法是先捕获符合删除条件的文件,再根据是否存在这类文件来记录日志:
# 配置参数 $logFilePath = "D:\TEST\Log $(Get-Date -f dd-MM-yyyy).txt" $retentionDays = 7 # 替换为你的指定天数 $logFolder = "你的日志文件夹路径" # 替换为实际要清理的文件夹 # 获取需要删除的文件 $filesToRemove = Get-ChildItem -Path $logFolder -File | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-$retentionDays) } if ($filesToRemove.Count -gt 0) { # 执行删除并记录成功信息 $filesToRemove | Remove-Item -Force "[$(Get-Date -f HH:mm:ss)] 成功删除 $($filesToRemove.Count) 个文件" *>> $logFilePath } else { # 记录无符合条件文件的信息 "[$(Get-Date -f HH:mm:ss)] 未找到需要删除的文件" *>> $logFilePath }
关键说明
- 通过
Get-ChildItem结合Where-Object筛选出过期文件,直接通过集合数量判断是否有文件需要删除,逻辑更准确 - 添加了时间戳,日志内容更清晰
- 修正了原脚本中的拼写和路径错误
内容的提问来源于stack exchange,提问作者Дмитрий Захаров
相关产品推荐
相关产品推荐

