Ich versuche, einen File Watcher mit Powershell zu erstellen. Brauche ein PHP-Skript, sobald eine Datei geändert wurde. Mein erster Gedanke war, dass alles perfekt funktioniert, aber es scheint, als ob es nur einmal ausgelöst wird.File Watcher mit nicht immer triggernder Powershell
Sobald ich eine * .js Datei im angegebenen Ordner ändere, wird das PHP-Script ausgelöst. Aber es löst nur einmal aus. Ich änderte die Datei ein paar Minuten später wieder, aber das PHP-Skript wurde nicht mehr ausgeführt (selbst die Write-Host
tat nichts).
Hier ist mein Powershell-Skript:
#By BigTeddy 05 September 2011
#This script uses the .NET FileSystemWatcher class to monitor file events in folder(s).
#The advantage of this method over using WMI eventing is that this can monitor sub-folders.
#The -Action parameter can contain any valid Powershell commands. I have just included two for example.
#The script can be set to a wildcard filter, and IncludeSubdirectories can be changed to $true.
#You need not subscribe to all three types of event. All three are shown for example.
# Version 1.1
$global:folder = 'C:\Users\Dario\Desktop\scripts' # Enter the root path you want to monitor.
$filter = '*.js' # You can enter a wildcard filter here.
# In the following line, you can change 'IncludeSubdirectories to $true if required.
$fsw = New-Object IO.FileSystemWatcher $folder, $filter -Property @{IncludeSubdirectories = $false;NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'}
# Here, all three events are registerd. You need only subscribe to events that you need:
Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action {
$name = $Event.SourceEventArgs.Name
$changeType = $Event.SourceEventArgs.ChangeType
$timeStamp = $Event.TimeGenerated
Write-Host "The file '$name' was $changeType at $timeStamp" -fore green
}
Register-ObjectEvent $fsw Changed -SourceIdentifier FileChanged -Action {
$name = $Event.SourceEventArgs.Name
$changeType = $Event.SourceEventArgs.ChangeType
$timeStamp = $Event.TimeGenerated
$path = $global:folder + "\" + $name
Try {
Write-Host "The file '$name' was $changeType at $timeStamp" -fore white
cmd.exe /k ""C:\Users\Dario\Desktop\mep\script.bat" "$path""
} Catch {
Write-Host "Problems"
}
}
# To stop the monitoring, run the following commands:
# Unregister-Event FileDeleted
# Unregister-Event FileCreated
# Unregister-Event FileChanged
Wie führen Sie das Skript aus, um sicherzustellen, dass die Ereignisse nicht zerstört werden, wenn Ihre PowerShell-Instanz beendet wird? –