function Watch-File { Param( [Parameter(Mandatory=$false)] [ValidateSet('Created', 'Changed', 'Deleted', 'Renamed', 'Error')] [string]$event ) # Define the path to the file you want to monitor $file = "C:\temp\file.txt" # Define the action that should be taken when the file changes $action = { switch ($event) { "Created" { Write-Host "File created" } "Changed" { Write-Host "File changed" } "Deleted" { Write-Host "File deleted" } "Renamed" { Write-Host "File renamed" } "Error" { Write-Host "Error" } default { Write-Host "Sorry" } } } # Create a new FileSystemWatcher object $watcher = New-Object System.IO.FileSystemWatcher $watcher.Path = Split-Path -Path $file -Parent $watcher.Filter = Split-Path -Path $file -Leaf $watcher.IncludeSubdirectories = $false $watcher.NotifyFilter = [System.IO.NotifyFilters]::LastWrite -bor [System.IO.NotifyFilters]::FileName # Register the event watcher $watcher.EnableRaisingEvents = $true Register-ObjectEvent -InputObject $watcher -EventName $event -Action $action -SourceIdentifier FileChangedEvent # Keep the script running until the user stops it manually while ($true) { Start-Sleep -Seconds 1 } # Unregister the event watcher Unregister-Event -SourceIdentifier FileChangedEvent }