フォルダにファイルが来た瞬間を拾う ― PowerShell + FileSystemWatcherで変更監視

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

この記事について
この記事は、生成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つだけに依存しない方が安全です。

一方で、補助自動化や作業フォルダ監視にはとても便利です。

GitHubサンプル

公式情報・一次情報

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

コメント

タイトルとURLをコピーしました