如何在PowerShell的ForEach循环中实现-verbose归档日志输出?
解决PowerShell脚本中7-Zip归档操作的Verbose日志问题
我来帮你搞定这个7-Zip归档的verbose输出问题!你的脚本目前删除文件有清晰的verbose反馈,但归档操作的状态被屏蔽了,而且没有主动记录归档成功的日志。咱们一步步调整:
核心问题分析
你当前的7-Zip调用后面加了| Out-Null,这直接把7z的命令行输出全部屏蔽;另外脚本里也没有主动输出归档操作的状态信息,所以看不到归档的详细过程和结果。
修改后的完整脚本
下面是调整后的脚本,我标注了关键改动点:
# start logging of archived files and specify log location for each day Start-transcript C:\Temp\LogArchiveTesting\Logs\Archived_Server_Logging_$(get-date -format ddMMMyyyy).log # 启用Verbose输出(如果脚本没通过-Verbose参数调用,这里可以强制开启) $VerbosePreference = 'Continue' # set folder path $log_path = "C:\Temp\LogArchiveTesting\*.*" $zip_path = "C:\Temp\LogArchiveTesting\Archive\*.7z" $target_path = "C:\Temp\LogArchiveTesting\Archive\" # set min age of files $max_months = "-6" $delete_max_days = "-365" # get the current date $curr_date = Get-Date # determine how far back we go based on current date $zip_date = $curr_date.AddMonths($max_months) $delete_zip_date = $curr_date.AddDays($delete_max_days) # filter files Get-ChildItem $log_path | Where-Object { ($_.LastWriteTime -lt $zip_date) -and ($_.psIsContainer -eq $false)}| ForEach-Object { $Zip = $target_path + "{0:yyMM}_{0:MMM}Server Logging.7z" -f $_.LastWriteTime Write-Verbose "准备归档文件: $($_.FullName) 到压缩包: $Zip" # 执行7-Zip归档,不再屏蔽输出,保留原生反馈 & "C:\Program Files\7-Zip\7z.exe" u -mx9 -t7z -m0=lzma2 $Zip $_.FullName If ($LastExitCode -eq 0) { Write-Verbose "归档成功: $($_.FullName) -> $Zip" Remove-Item $_.FullName -Verbose } else { Write-Warning "归档失败: $($_.FullName),7-Zip退出代码: $LastExitCode" } } # 删除旧压缩包,保留Verbose输出 Get-ChildItem $zip_path | Where-Object { $_.LastWriteTime -lt $delete_zip_date } | Remove-Item -Verbose #Stops logging of archived files stop-transcript
关键改动说明
- 启用全局Verbose设置:添加
$VerbosePreference = 'Continue',确保即使脚本没加-Verbose参数运行,也能输出verbose日志(如果需要仅在手动指定参数时输出,可以去掉这行,运行脚本时用.\你的脚本名.ps1 -Verbose)。 - 移除
| Out-Null:让7-Zip的原生输出直接显示到控制台和日志里,能看到归档的详细过程(比如添加文件数量、压缩率、进度等)。 - 添加归档状态日志:用
Write-Verbose明确记录“准备归档”和“归档成功”的信息,让日志更直观易读。 - 新增失败处理:添加
Write-Warning输出归档失败的信息,方便后续排查问题。
这样调整后,你的日志文件里就会同时包含7-Zip的原生操作反馈和自定义的归档状态记录,完全满足你追踪归档操作的需求啦!
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

