フォルダにファイルが来た瞬間を拾う ― 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サンプル

公式情報・一次情報

文書情報

記事タイトル
フォルダにファイルが来た瞬間を拾う ― PowerShell + FileSystemWatcherで変更監視
作成日
更新日
Source URL
https://papanda925.com/?p=15239

ライセンス: 本記事のうち、当サイトが権利を有する本文・自作図表は、特記なき限り CC BY 4.0 で利用できます。生成AIを活用して作成・編集した内容を含みます。コードについて、別途ライセンス表示またはリンク先GitHubリポジトリのライセンスがある場合は、その条件を優先します。引用・第三者資料・画像・商標等は本ライセンスの対象外です。 利用ポリシー

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