请求修改PowerShell代码:将文件监控日志保存至.xlsx文件
解决方案
要将监控日志保存为XLSX格式,PowerShell没有原生的XLSX写入命令,我们可以使用ImportExcel模块(PowerShell生态中处理Excel文件的常用工具)来实现。以下是具体修改步骤和完整代码:
1. 安装ImportExcel模块
打开PowerShell(建议以管理员身份运行),执行以下命令完成模块安装:
# 首次安装需先信任PowerShell Gallery仓库 Set-PSRepository -Name PSGallery -InstallationPolicy Trusted # 将模块安装到当前用户目录 Install-Module -Name ImportExcel -Scope CurrentUser
2. 修改后的完整监控代码
### SET FOLDER TO WATCH + FILES TO WATCH + SUBFOLDERS YES/NO $watcher = New-Object System.IO.FileSystemWatcher $watcher.Path = "C:\Users\admin\Desktop\iguaracu_pr" $watcher.IncludeSubdirectories = $true $watcher.EnableRaisingEvents = $true ### DEFINE ACTIONS AFTER AN EVENT IS DETECTED $action = { $fileName = $Event.SourceEventArgs.Name # 保留原逻辑:移除文件名最后4个字符 $cleanedFileName = $fileName -replace ".{4}$" $changeType = $Event.SourceEventArgs.ChangeType # 结构化日志数据,方便Excel表头识别 $logEntry = [PSCustomObject]@{ 事件类型 = $changeType 文件名 = $cleanedFileName 发生时间 = Get-Date # 新增时间戳,提升日志实用性 } # 写入XLSX文件,自动追加行,首次运行自动创建表头 $logPath = "C:\Users\admin\Pictures\Duvidas\log.xlsx" $logEntry | Export-Excel -Path $logPath -Append -AutoSize } ### DECIDE WHICH EVENTS SHOULD BE WATCHED Register-ObjectEvent $watcher "Created" -Action $action Register-ObjectEvent $watcher "Changed" -Action $action Register-ObjectEvent $watcher "Deleted" -Action $action Register-ObjectEvent $watcher "Renamed" -Action $action while ($true) {sleep 5}
关键修改说明
- 替换原CSV写入逻辑,用
[PSCustomObject]结构化日志数据,让Excel表头更清晰易读 - 新增发生时间字段,记录事件具体时间,方便后续排查
- 使用
Export-Excel的-Append参数实现日志追加写入:首次运行自动创建带表头的XLSX文件,后续运行直接追加新行 -AutoSize参数自动调整Excel列宽,优化阅读体验
内容的提问来源于stack exchange,提问作者Rodrigo Lunardelli
相关产品推荐
相关产品推荐

