PowerShell中获取Remove-Item命令删除操作日志的简便方案咨询
PowerShell 删除旧文件新增日志极简实现方案
你可以直接在原有管道链中插入日志写入逻辑,不需要预先把待删除文件存入数组,代码改动量极小,执行逻辑和原有脚本完全一致。
首先注意你现有脚本存在一处语法错误:第三个过滤条件里_.LastWriteTime缺少$标识符,需修正为$_.LastWriteTime。
实现代码
# 配置项:删除阈值、日志路径 $DeleteDate = (Get-Date).AddDays(-10) $logPath = "C:\FileDelete_Log.log" $path1 = "\\path1\*.tibx*" $path2 = "\\path2\*Backup Set*" $path3 = "\\path3\*.tibx*" # 写入日志头:记录本次执行起始时间 Add-Content -Path $logPath -Value "`n=== 清理任务开始执行: $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') ===" # 原有删除逻辑仅插入一行日志处理代码,后续直接接Remove-Item即可 Get-ChildItem $path1 | Where {$_.LastWriteTime -lt $DeleteDate} | ForEach-Object { Add-Content -Path $logPath -Value "删除文件: $($_.FullName) 最后修改时间: $($_.LastWriteTime.ToString('yyyy-MM-dd HH:mm:ss'))" $_ # 把文件对象继续向下传递给Remove-Item } | Remove-Item -Force Get-ChildItem $path2 -Recurse | Where {$_.LastWriteTime -lt $DeleteDate} | ForEach-Object { Add-Content -Path $logPath -Value "删除文件: $($_.FullName) 最后修改时间: $($_.LastWriteTime.ToString('yyyy-MM-dd HH:mm:ss'))" $_ } | Remove-Item -Force Get-ChildItem $path3 | Where {$_.LastWriteTime -lt $DeleteDate} | ForEach-Object { Add-Content -Path $logPath -Value "删除文件: $($_.FullName) 最后修改时间: $($_.LastWriteTime.ToString('yyyy-MM-dd HH:mm:ss'))" $_ } | Remove-Item -Force # 写入日志尾:记录执行完成时间 Add-Content -Path $logPath -Value "=== 清理任务执行完成: $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') ==="
方案优势
- 无需预先缓存待删除文件到数组,大数量文件场景下无额外内存开销
- 日志写入和删除操作串行执行,不会出现日志记录和实际删除结果不一致的问题
- 仅在原有管道中增加日志写入步骤,原有业务逻辑完全不变
如果需要同时在控制台输出删除记录,把Add-Content替换为Tee-Object -FilePath $logPath -Append即可同时实现控制台输出+日志写入。
内容的提问来源于stack exchange,提问作者Dati
相关产品推荐
相关产品推荐

