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

参考元に記述されているような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}

参考