关于本文
本文是通过利用生成式 AI 的自动化工作流创建的。它确认了 .NET 的 FileSystemWatcher 规范,并将其整理为使用 PowerShell 对文件夹更改进行事件监控的技巧。验证状态:📘 已确认官方API・已实现PowerShell示例・未在实机上验证
捕获文件到达文件夹的瞬间 — PowerShell + FileSystemWatcher 变更监控
“当共享文件夹中放入 CSV 时进行处理”。虽然也可以通过定期重复 Get-ChildItem 的方式来实现,但 .NET 中存在用于接收文件系统更改通知的 FileSystemWatcher。
可以从 PowerShell 直接调用。
如果只有 Created 事件则非常简短
# FileSystemWatcher 是用于监控文件夹更改的 .NET 类。
# 仅以 C:Temp 的 *.txt 为对象。
$watcher = [System.IO.FileSystemWatcher]::new("C:Temp", "*.txt")
# 注册发生 Created 事件时的处理逻辑。
Register-ObjectEvent $watcher Created -Action {
# SourceEventArgs.FullPath 中包含所创建文件的完整路径。
Write-Host "Created:" $Event.SourceEventArgs.FullPath
}
# 在这里开始实际的事件通知。
$watcher.EnableRaisingEvents = $true
# FileSystemWatcher 是事件驱动的。
# 此 while 不是每秒搜索一次文件,而是为了防止脚本结束的等待。
while ($true) { Start-Sleep 1 }
仅凭这一点,当在目标文件夹中创建 txt 文件时,就会运行事件处理。
完整版包含 4 个事件
GitHub 版注册了 Created / Changed / Deleted / Renamed,并在结束时清理事件注册和 FileSystemWatcher。
sequenceDiagram
participant OS as File system
participant F as FileSystemWatcher
participant PS as PowerShell
OS-->>F: 変更通知
F-->>PS: Event
PS->>PS: ログ・後続処理
“监控”与“审计”不同
如果在短时间内发生大量更改,则需要考虑通知重复和内部缓冲区的问题。作为不能丢失任何一条记录的审计日志正本,仅依赖这一个功能是不够安全的。
另一方面,它对于辅助自动化或工作文件夹监控非常方便。

コメント