捕获文件到达文件夹的瞬间 — PowerShell + FileSystemWatcher 变更监控

PowerShellカテゴリを表すパンダのイラスト PowerShell

关于本文
本文是通过利用生成式 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: ログ・後続処理

“监控”与“审计”不同

如果在短时间内发生大量更改,则需要考虑通知重复和内部缓冲区的问题。作为不能丢失任何一条记录的审计日志正本,仅依赖这一个功能是不够安全的。

另一方面,它对于辅助自动化或工作文件夹监控非常方便。

GitHub 示例

官方信息・一手信息

ライセンス:本記事のテキスト/コードは特記なき限り CC BY 4.0 です。引用の際は出典URL(本ページ)を明記してください。
利用ポリシー もご参照ください。

コメント

标题和URL已复制