Dateiüberprüfung per Powershell - Versand per Mail
Hallo liebe Community,
gibt es eine Möglichkeit per Powershell eine Datei zu überwachen und falls diese geändert wird eine Email zu versenden ?
Dies muss nicht live geschehen, das Script soll dann als Task eingebunden sein und alle 15 Minuten laufen.
Die Email soll dann nur den Pfad zur Datei beinhalten.
Leider finde ich keinen Weg, dies irgendwie zu implementieren.
Ich hoffe Ihr könnt mir den Stoß in die richtige Such/Gedankenrichtung geben.
Vielen Dank und einen schönen Abend
Gruß
smithers
gibt es eine Möglichkeit per Powershell eine Datei zu überwachen und falls diese geändert wird eine Email zu versenden ?
Dies muss nicht live geschehen, das Script soll dann als Task eingebunden sein und alle 15 Minuten laufen.
Die Email soll dann nur den Pfad zur Datei beinhalten.
Leider finde ich keinen Weg, dies irgendwie zu implementieren.
Ich hoffe Ihr könnt mir den Stoß in die richtige Such/Gedankenrichtung geben.
Vielen Dank und einen schönen Abend
Gruß
smithers
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 247596
Url: https://administrator.de/contentid/247596
Ausgedruckt am: 22.11.2024 um 14:11 Uhr
3 Kommentare
Neuester Kommentar
Moin smithers,
würde auch die Lösung von @DerWoWusste nehmen, wenn du es aber unbedingt mit Powershell machen möchtest kann man dies hiermit erreichen (Wichtig: Hiermit lassen sich nur lokale Ordner überwachen, keine Netzlaufwerke):
Dass Script überprüft alle 60 Sekunden ob in dieser Zeit eine Änderung der Datei stattgefunden hat. Das Script muss also nur einmal gestartet werden und überwacht dann die Events im Hintergrund.
Grüße Uwe
würde auch die Lösung von @DerWoWusste nehmen, wenn du es aber unbedingt mit Powershell machen möchtest kann man dies hiermit erreichen (Wichtig: Hiermit lassen sich nur lokale Ordner überwachen, keine Netzlaufwerke):
Dass Script überprüft alle 60 Sekunden ob in dieser Zeit eine Änderung der Datei stattgefunden hat. Das Script muss also nur einmal gestartet werden und überwacht dann die Events im Hintergrund.
<#
Monitor folder changes
#>
# Variables -------------------------
# local folder path to monitor
$localFolderPath = "C:\Ordner"
#Filename to check for changes
$strFilename = "demo.txt"
# interval to check for changes (seconds)
$intMonitorInterval = 60
# -----------------------------------
# get seperate drive and path for wql query specific formatting
$strDrive = $localFolderPath.Split("\")
$localFolderPath.TrimEnd("\")
$strPath = $localFolderPath.Split(":")[1].Replace("\","\\")+"\\"
# action fired when event occurs
$eventaction = {
#object which fired the event
$obj = $Event.SourceEventArgs.NewEvent.TargetInstance
$objWMI = gwmi "Win32_OperatingSystem"
$modifiedDate = get-date ($objWMI.ConvertToDateTime($obj.LastModified)) -Format 'dd.MM.yyyy HH:mm:ss'
# send mail
$smtpusername = 'USERNAME'
$smtppassword = 'PASSWORD'
$smtpfrom = 'fromuser@domain.de'
$smtpto = 'fromuser@domain.de'
$smtpserver = "smtp.server.de"
$smtpcred = new-Object pscredential($smtpusername,(Convertto-SecureString $smtppassword -AsPlainText -Force))
Try{
Send-MailMessage -To $smtpto -From $smtpfrom -Subject 'Eine Datei hat sich geändert' -Body "Die Datei '$($obj.Name)' wurde geändert am $modifiedDate" -SmtpServer $smtpserver -UseSsl -Credential $smtpcred -Encoding UTF8 -ErrorAction Stop
write-host "Datei '$strFilename' wurde geändert am $modifiedDate, eine E-Mail wurde verschickt." -ForegroundColor Green
}catch{
write-host $_
}
}
$query = "Select * From __InstanceModificationEvent WITHIN $intMonitorInterval`
where TargetInstance ISA 'CIM_DataFile'`
and TargetInstance.Drive = '$strDrive'`
and TargetInstance.Path = '$strPath'`
and TargetInstance.Name like '%$strFilename'"
#actually register Event-Subscriber
Register-WmiEvent -query $query -SourceIdentifier "Monitor Folder Watcher" -action $eventaction
while($true){
sleep($intMonitorInterval)
}
# to unregister the event call
# Unregister-Event -SourceIdentifier "Monitor Folder Watcher"