PowerShellでファイルの作成や編集、削除の検知・モニタリングを行う

Windowsで、Linuxのようにinotify-toolsを使ってファイルの作成や編集、削除について検知とかをするにはどうすればいいのかなと思って調べてみた。どうやら、PowerShellでもやろうと思えばできるようだ。Windowsでinotifyのようにファイルのイベントを検知する場合は「System.IO.FileSystemWatcher」を用いることで同様のことが行える。

Sponsored Links

参考元に記述されているようなPowerShellスクリプトを記述することで、指定されたログに監視PATHで発生したイベントをログに記録させることができるようだ。ちょっとだけ記述を変えて試してみたので、一応変えたソースも置いておく。実際に利用するのであれば、PowerShellでバックグラウンドプロセスとして動作させる必要があるので、『Start-Job』コマンドを用いてキックする必要があると思う。下記の例だと、スクリプトの引数1を監視し、その結果を引数2で指定したログファイルに出力するような感じ。とりあえず、手元のWindows 10では確かにイベント発生と同時にログが出力された。

●fwatch.ps1

$watchDirPath = $Args[0]
$logPath = $Args[1]

$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = "$watchDirPath"
$watcher.Filter = "*.*"
$watcher.IncludeSubdirectories = $true
$watcher.EnableRaisingEvents = $true  

$action = { $path = $Event.SourceEventArgs.FullPath
            $changeType = $Event.SourceEventArgs.ChangeType
            $logline = "$(Get-Date), $changeType, $path"
            Add-content $logPath -value $logline
          }    


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 1}

 

【参考】

 


Written by blacknon

インフラエンジニア(…のつもり)。 仕事で使うならクライアントはWindowsよりはUNIXの方が好き。 大体いつも眠い。

Leave a Comment

メールアドレスが公開されることはありません。

*