Ich habe ein Skript basierend auf New-Objekt System.IO.FileSystemWatcher, der einen Ordner auf meinem Home-Dateiserver für neue Dateien überwacht und eine externe App, aber jetzt ausgeführt Ich freue mich auf die Verwendung von New-Object System.IO.FileSystemWatcher, um eine Reihe von mehreren Servern (Eingabe von einem .csv) zu überwachen.New-Objekt System.IO.FileSystemWatcher mehrere Server
Ich habe den folgenden Code funktioniert bis zur Erkennung der Ereignisse, aber es generiert eine Warnung für eine neue Datei mehrmals, wenn neue Dateien erkannt werden. Irgendeine Idee, wie ich es bekommen könnte, nur eine Warnung generieren? Ich denke, so ist meine Schleife aufgebaut?
Jede Hilfe wird geschätzt!
$Servers = import-csv "C:\Scripts\Servers.csv"
while($true) {
ForEach ($Item in $Servers) {
# Unregister-Event $changed.Id -EA 0
$Server = $($Item.Server)
write-host "Checking \\$Server\c$\Scripts now"
#$folder = "c\Scripts"
$filter = "*.html"
$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = "\\$Server\c$\Scripts\"
$watcher.Filter = "*.html"
$watcher.IncludeSubdirectories = $False
$watcher.EnableRaisingEvents = $true
$created = Register-ObjectEvent $watcher "Created" -Action {
write-host "A new file has been created on $Server $($eventArgs.FullPath) -ForegroundColor Green
}
} #ForEach
write-host "Monitoring for new files. Sleeping for 5 seconds"
Start-Sleep -s 5
} #While
Hier ist die einzige Server-Version von meinem Skript, im Grunde, ich möchte die gleiche Sache zu tun, außer laufen gegen eine Reihe von Servern:
$SleepTimer = 15
$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = "\\FILESERVER\NEWSTUFF\"
$watcher.Filter = "*.html"
$watcher.IncludeSubdirectories = $true
$watcher.EnableRaisingEvents = $true
### DEFINE ACTIONS AFTER A EVENT IS DETECTED
$action = {
$path = $Event.SourceEventArgs.FullPath
$changeType = $Event.SourceEventArgs.ChangeType
$logline = "$changeType, $path"
write-host "$LogLine created"
**RUN EXTERNAL PROGRAM HERE**
add-content -Value $LogLine -path "\\Fileserver\Log.txt"
}
### DECIDE WHICH EVENTS SHOULD BE WATCHED + SET CHECK FREQUENCY
$created = Register-ObjectEvent $watcher "Created" -Action $action
while ($true) {
write-warning "no new files detected. Sleeping for $SleepTimer seconds ..."
start-sleep -s $SleepTimer
}
Entschuldigung, ich hätte klarer sein sollen. Ich erhalte mehrere Benachrichtigungen für den gleichen Server und die erstellte Datei. Wenn ich die einzelne Version des Skripts ausführe, erhalte ich nur die eine Warnung pro Server, bis eine neue Datei erstellt wird. – Kenny
Ok. Wie würde ich neu anordnen/neu schreiben, so dass ich nur eine Warnung für jede neue Datei, die auf dem Server erstellt wurde, erhalte, aber ich kann sie auf unbestimmte Zeit laufen lassen? – Kenny
Ich habe meine Single-Server-Version zu meinem ursprünglichen Beitrag hinzugefügt: – Kenny