Monitoring file system changes in Powershell
# region Import Assemblies#- [void] [Reflection.Assembly]:: Load ("System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") [void] [Reflection.Assembly]:: Load ("System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") [void] [Reflection.Assembly]:: Load ("System.Drawing Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ") [void] [Reflection.Assembly]:: Load (" mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ") [void] [Reflection.Assembly]:: Load (" System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ") [void] [Reflection.Assembly]:: Load (" System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ") [void] [Reflection.Assembly]:: Load (" System.DirectoryServices, Version=2.0.0.0, Culture=neutral " PublicKeyToken=b03f5f7f11d50a3a ") # endregion Import Assemblies# sets the monitoring path $script:folder=" C:\ "$form=New-Object System.Windows.Forms.Form$form.FormBorderStyle=" Fixed3D "$form.StartPosition = 'CenterScreen'$form.ClientSize=" 200jie 80 "$form.Text=" Monitor "$buttonStart=New-Object System.Windows.Forms.Button$buttonStart.Text=" Start Watch "$buttonStart.Location=" 45 buttonStart.add_click ({start-watch}) $buttonStart.Size= "100J 20" $buttonStop=New-Object System.Windows.Forms.Button$buttonStop.Text= "Stop Watch" $buttonStop.Location= "45J 40" $buttonStop. Add_click ({stop-watch}) $buttonStop.Size= "100je 20" $form.Controls.AddRange (@ ($buttonStart) $buttonStop) $script:watcher = New-Object System.IO.FileSystemWatcher $folder# starts monitoring function start-watch {$NotifyFilters=New-Object System.IO.NotifyFilters # $watcher.NotifyFilter= "Size,LastWrite,LastAccess,CreationTime,Security" $watcher.Filter = "*. *" $watcher.InternalBufferSize = 65536 # whether it contains subdirectories $watcher.IncludeSubDirectories = $True # whether events are triggered You must enable $watcher.EnableRaisingEvents = $True $watcher.SynchronizingObject = $form $form.Text= "Monitoring" $buttonStart.Enabled=$false # trigger $watcher.add_Created ({created}) $watcher.add_Changed ({changed}) $watcher.add_Deleted ({deleted}) $watcher.add_Renamed ({renamed})} function msg ($message) {[Windows.Forms.MessageBox]:: Show ($message)} # $_ .changetype get operation type # $_ .fullpath get file absolute path function created () {# create file # write processing logic msg ($_ .fullpath)} function changed () {# file information change # write processing logic msg ($_ .fullpath)} function deleted () {# delete file # write processing logic msg ($_ .fullpath)} function renamed () { # name change # write the processing logic msg ($_ .fullpath)} # stop monitoring function stop-watch {$watcher.EnableRaisingEvents = $false $form.Text= "Monitor" $buttonStart.Enabled=$true} $form.ShowDialog ()