Überwachung von Dateien
Hallo
Ich habe hier ein Powershell Script, daß mir bei Veränderungen an bestimmten Dateien eine Email sendet.
Soweit klappt das mittlerweile auch.
Allerdings, wenn ich die Powershell starte, bekomme ich von jeder Datei die in den Verzeichnissen gefunden werden eine Benachrichtigung, daß sie geändert worden sind.
Also wenn da 3 Dateien vorhanden sind, bekomme ich 3 Emails.
Ich lösche die Mails und verändere dann eine Datei und dann erhalte ich auch nur von dieser geänderten Datei die Benachrichtigung.
Ich verstehe nur nicht, weshalb ich beim starten der Powershell von allen Dateien eine Benachrichtigung erhalte.
Hat da jemand ne Idee?
Hier mal der Code
Ich habe hier ein Powershell Script, daß mir bei Veränderungen an bestimmten Dateien eine Email sendet.
Soweit klappt das mittlerweile auch.
Allerdings, wenn ich die Powershell starte, bekomme ich von jeder Datei die in den Verzeichnissen gefunden werden eine Benachrichtigung, daß sie geändert worden sind.
Also wenn da 3 Dateien vorhanden sind, bekomme ich 3 Emails.
Ich lösche die Mails und verändere dann eine Datei und dann erhalte ich auch nur von dieser geänderten Datei die Benachrichtigung.
Ich verstehe nur nicht, weshalb ich beim starten der Powershell von allen Dateien eine Benachrichtigung erhalte.
Hat da jemand ne Idee?
Hier mal der Code
$computers = "1234567" # Liste der Computernamen
$folderToWatch = "c\test\TEST"
$filter = "*.cfg"
$intervalSeconds = 2 # Intervall in Sekunden (1 Minute)
$emailFrom = "noreplay@xyz.com"
$emailTo = "user@xyz.com"
$emailSubject = "CFG Datei geändert!!!"
$emailSMTPServer = "smtp.com"
$lastWriteTimeList = @{}
while ($true) {
foreach ($computer in $computers) {
$files = Get-ChildItem -Path "\\$computer\$($folderToWatch.TrimStart('C:\'))" -Filter $filter -Recurse
foreach ($file in $files) {
if ($lastWriteTimeList[$file.FullName] -ne $file.LastWriteTime) {
$lastWriteTimeList[$file.FullName] = $file.LastWriteTime
$body = "Die folgende Datei wurde geändert: $($file.FullName)"
Send-MailMessage -From $emailFrom -To $emailTo -Subject $emailSubject -Body $body -SmtpServer $emailSMTPServer -encoding ([System.Text.Encoding]::UTF8)
}
}
}
Start-Sleep -Seconds $intervalSeconds
}
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 5976903601
Url: https://administrator.de/contentid/5976903601
Ausgedruckt am: 17.11.2024 um 19:11 Uhr
6 Kommentare
Neuester Kommentar
Oder ohne Counter:
Vor dem 1. "While" eine abgespeckte Variante davon, zum Füllen der Tabelle :
Vor dem 1. "While" eine abgespeckte Variante davon, zum Füllen der Tabelle :
foreach ($computer in $computers) {
$files = Get-ChildItem -Path "\\$computer\$($folderToWatch.TrimStart('C:\'))" -Filter $filter -Recurse
foreach ($file in $files) {
$lastWriteTimeList[$file.FullName] = $file.LastWriteTime
}
}
https://powershell.one/tricks/filesystem/filesystemwatcher
Für deinen Fall müsste man folgendes nur erweitern:
Momentan gibt es dann eine Ausgabe an der Konsole. Kann aber alles sein.
Schau dir mal das Script an...
Für deinen Fall müsste man folgendes nur erweitern:
$ChangeTypes = [System.IO.WatcherChangeTypes]::Created, [System.IO.WatcherChangeTypes]::Deleted
$ChangeTypes = [System.IO.WatcherChangeTypes]::Created, [System.IO.WatcherChangeTypes]::Deleted, [System.IO.WatcherChangeTypes]::Changed
Momentan gibt es dann eine Ausgabe an der Konsole. Kann aber alles sein.
Schau dir mal das Script an...