FileSystemWatcher mit PowerShell

User Rating: 5 / 5

Star ActiveStar ActiveStar ActiveStar ActiveStar Active
 

FileSystemWatcher mit eigenen Funktionen

 

Zu beachten ist, das die Funktionen vor dem registrieren der ObjectEvents geschrieben werden. Die eigene Funktion "filechanged" muss als global definiert werden, weil der EventWatcher in einem eigene scope läuft und die Funktion sonst nicht findet. Eine weitere Lösung wäre das dotNet-sourcing, in welchen der Pfad zum Script angegeben wird, in welchem sich die Funktion befindet.

 

#[Script]
"Starte Überwachung der txt Dateien in C:\Temp..."

$fsw = New-ObjectSystem.IO.FileSystemWatcher
$fsw.Path = "C:\Temp"
$fsw.IncludeSubdirectories = $true
$fsw.filter = "*.txt"

function global:fileChanged ($text) {
Write-Host "This is the filechanged function, globally defined!"
Write-Host $text
}

$OnCreated = {
Write-Host "DateiSystemereignis Created: " $eventArgs.FullPath ": " $eventArgs.ChangeType
$txt = "Created!!!"
filechanged($txt)
}

$OnChanged
= {
Write-Host "DateiSystemereignis Changed: " $eventArgs.FullPath ": " $eventArgs.ChangeType
$txt = "Changed!!!"
filechanged($txt)
}

$OnDeleted = {
Write-Host "DateiSystemereignis Deleted: " $eventArgs.FullPath ": " $eventArgs.ChangeType
$txt = "Deleted!!!"
filechanged($txt)
}

$OnRenamed = {
Write-Host "DateiSystemereignis Renamed: " $eventArgs.FullPath ": " $eventArgs.ChangeType
$txt="Renamed!!!"
filechanged($txt)
}

Register-ObjectEvent -InputObject  $fsw -EventName Created -Action $OnCreated
Register-ObjectEvent
-InputObject $fsw -EventName Changed -Action $OnChanged
Register-ObjectEvent
-InputObject $fsw -EventName Deleted -Action $OnDeleted
Register-ObjectEvent
-InputObject $fsw -EventName Renamed -Action $OnRenamed

"Überwachung läuft!"

 #[ScriptEnde]