見出し画像

PowerShell ファイルやフォルダを監視したい

ファイルやフォルダの変更を監視したいときのスクリプトです。



#↓溜まっているジョブを終了させる
$ErrorActionPreference = "silentlycontinue"

for($i=1;$i -lt 100;$i+=1){
 Remove-Job -Id $i -Force
}
#同じセッション上のイベントを削除する
Get-EventSubscriber -Force | Unregister-Event -Force

$ErrorActionPreference = "continue"
#↑溜まっているジョブを終了させる


$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = "C:\temp\" # 監視するディレクトリ
$watcher.Filter = "*.xlsx" # ファイル名 ワイルドカード可
#$watcher.Filter = "*.*" # ファイル名 ワイルドカード可
$watcher.IncludeSubdirectories = $true #サブディレクトリを監視するかどうか
$watcher.EnableRaisingEvents = $true

# イベントリスナー
$action = {
 $path = $Event.SourceEventArgs.FullPath
 $changeType = $Event.SourceEventArgs.ChangeType
 Write-Host "$(Get-Date), $changeType, $path"
}

# イベントの登録
Register-ObjectEvent $watcher "Created" -Action $action
Register-ObjectEvent $watcher "Changed" -Action $action
Register-ObjectEvent $watcher "Deleted" -Action $action
Register-ObjectEvent $watcher "Renamed" -Action $action

while ($true) { sleep 5 }

上の例ではc:\temp\の下のサブフォルダを含む全体を監視対象にしていて、そのなかでエクセルファイルが作られたり変更したりするとwrite-hostで出力するようになっています。

2回実行すると上手く動作しなくなるので、最初の部分でジョブを削除しています。

#PowerShell #プログラミング学習 #プログラミング入門 #IT #Windows #ファイル監視 #フォルダ監視


USBメモリへの書き込みを監視する記事はこちら


いいなと思ったら応援しよう!