Skip to content

Instantly share code, notes, and snippets.

@furyutei
Created December 3, 2024 03:52
Show Gist options
  • Select an option

  • Save furyutei/7c6e77e63214f78fe46e975c0a33f1e4 to your computer and use it in GitHub Desktop.

Select an option

Save furyutei/7c6e77e63214f78fe46e975c0a33f1e4 to your computer and use it in GitHub Desktop.
[PowerShell] FileSystemWatcherで特定のフォルダを監視するサンプル
Import-Module BurntToast
$Global:WatchFolder = 'D:\Test\WatchFolder'
$Watcher = New-Object System.IO.FileSystemWatcher
$Watcher.NotifyFilter = [System.IO.NotifyFilters]::LastWrite -bor [System.IO.NotifyFilters]::FileName -bor [System.IO.NotifyFilters]::DirectoryName
$Watcher.IncludeSubdirectories = $true
$Watcher.Path = $Global:WatchFolder
$Watcher.Filter = ''
$Action = {
$TargetFile = $Event.SourceEventArgs.Name
switch ($Event.SourceEventArgs.ChangeType) {
$([System.IO.WatcherChangeTypes]::Created) {
$EventName = '作成'
}
$([System.IO.WatcherChangeTypes]::Deleted) {
$EventName = '削除'
}
$([System.IO.WatcherChangeTypes]::Changed) {
$EventName = '変更'
}
$([System.IO.WatcherChangeTypes]::Renamed) {
$EventName = 'リネーム'
}
}
$Message = ("""{0}""が{1}されました" -f $TargetFile, $EventName)
New-BurntToastNotification -Text $Message -Header (New-BTHeader -Id 1 -Title ("""{0}""監視" -f $Global:WatchFolder))
Write-Host ("{0:yyyy/MM/dd hh:mm:ss}: {1}" -f (Get-Date), $Message)
}
$SID_Created = 'FileWatch_Created'
$SID_Deleted = 'FileWatch_Deleted'
#$SID_Changed = 'FileWatch_Changed'
$SID_Renamed = 'FileWatch_Renamed'
Register-ObjectEvent $Watcher 'Created' -SourceIdentifier $SID_Created -SupportEvent -Action $Action
Register-ObjectEvent $Watcher 'Deleted' -SourceIdentifier $SID_Deleted -SupportEvent -Action $Action
#Register-ObjectEvent $Watcher 'Changed' -SourceIdentifier $SID_Changed -SupportEvent -Action $Action
Register-ObjectEvent $Watcher 'Renamed' -SourceIdentifier $SID_Renamed -SupportEvent -Action $Action
Write-Host ("{0:yyyy/MM/dd hh:mm:ss}: 監視開始" -f (Get-Date))
$Watcher.EnableRaisingEvents = $true
try {
# 無限待ち(Ctrl+Cで中断)
While ($true) {
Start-Sleep 1
}
}
finally {
$Watcher.EnableRaisingEvents = $false
Write-Host ("{0:yyyy/MM/dd hh:mm:ss}: 監視停止" -f (Get-Date))
Unregister-Event -SourceIdentifier $SID_Created -Force
Unregister-Event -SourceIdentifier $SID_Deleted -Force
#Unregister-Event -SourceIdentifier $SID_Changed -Force
Unregister-Event -SourceIdentifier $SID_Renamed -Force
$Watcher.Dispose()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment