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メモリへの書き込みを監視する記事はこちら