この記事について
この記事は、生成AIを活用した自動生成フローで作成しています。.NETのFileSystemWatcher仕様を確認し、PowerShellでフォルダ変更をイベント監視するTIPSとして整理しています。検証ステータス:📘 公式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: ログ・後続処理
「監視」と「監査」は違う
短時間に大量変更が起きると、通知の重複や内部バッファの問題を考える必要があります。1件も欠落できない監査ログの正本として、これ1つだけに依存しない方が安全です。
一方で、補助自動化や作業フォルダ監視にはとても便利です。

コメント