Windows-Event per Powershell als Mail versenden
Hallo zusammen,
ich möchte von einem Windows Server (2016/2019) bzw. Windows 10-Gerät eine E-Mail bekommen, wenn ein Windows-Update erfolgreich installiert wurde.
Meine Idee war das Ganze über Powershell zu lösen, indem die Windows Aufgabenplanung das entsprechende Event überwacht und dann ein Skript auslöst. Mit "wevtutil" sollte das Event ausgelesen werden und mit "mailkit" (Powershell-Modul) erfolgt der Mail-Versand.
Das Skript sieht folgendermaßen aus:
Der Versand funktioniert auch aber leider fehlt die Hälfte der Information.
So müsste es in der Mail aussehen:
Event
Log Name: System
Source: Microsoft-Windows-WindowsUpdateClient
Date: 2023-02-06T10:12:00.6720000Z
Event ID: 19
Task: Windows Update-Agent
Level: Informationen
Opcode: Installation
Keyword: Installation,Erfolgreich
User: S-1-5-18
User Name: NT-AUTORIT─T\SYSTEM
Computer: toni-nb-lenovo
Description:
Installation erfolgreich: Das folgende Update wurde installiert. 9P6CT0SLW589-Microsoft.LanguageExperiencePackde-DE
Und so sieht es aus:
Event
Log Name: System
Source: Microsoft-Windows-WindowsUpdateClient
Date: 2023-02-06T10:12:00.6720000Z
Event ID: 19
Task: Windows Update-Agent
Level: Informationen
Opcode: Installation
Hat jemand eine Idee, woran es liegen könnte? (oder kennt jemand eine Alternative?)
MFG Toni
ich möchte von einem Windows Server (2016/2019) bzw. Windows 10-Gerät eine E-Mail bekommen, wenn ein Windows-Update erfolgreich installiert wurde.
Meine Idee war das Ganze über Powershell zu lösen, indem die Windows Aufgabenplanung das entsprechende Event überwacht und dann ein Skript auslöst. Mit "wevtutil" sollte das Event ausgelesen werden und mit "mailkit" (Powershell-Modul) erfolgt der Mail-Versand.
Das Skript sieht folgendermaßen aus:
Add-Type -Path "C:\Program Files\PackageManagement\NuGet\Packages\MailKit.3.5.0\lib\netstandard2.0\MailKit.dll"
Add-Type -Path "C:\Program Files\PackageManagement\NuGet\Packages\MimeKit.3.5.0\lib\netstandard2.0\MimeKit.dll"
$Eventlog = „System“ # (Security, Application, System)
$EventID = „19“
$SMTP = New-Object MailKit.Net.Smtp.SmtpClient
$Message = New-Object MimeKit.MimeMessage
$TextPart = [MimeKit.TextPart]::new("plain")
$TextPart.Text = (wevtutil qe $Eventlog „/q:*[System [(EventID=$EventID)]]“ /f:text /rd:true /c:1 | Out-String)
$Message.From.Add("absendermail")
$Message.To.Add("empfängermail")
$Message.Subject = 'Betreff'
$Message.Body = $TextPart
$SMTP.Connect('smtp-server', 587, $False)
$SMTP.Authenticate('mail-login', 'mailpasswort' )
$SMTP.Send($Message)
$SMTP.Disconnect($true)
$SMTP.Dispose()
Der Versand funktioniert auch aber leider fehlt die Hälfte der Information.
So müsste es in der Mail aussehen:
Event
Log Name: System
Source: Microsoft-Windows-WindowsUpdateClient
Date: 2023-02-06T10:12:00.6720000Z
Event ID: 19
Task: Windows Update-Agent
Level: Informationen
Opcode: Installation
Keyword: Installation,Erfolgreich
User: S-1-5-18
User Name: NT-AUTORIT─T\SYSTEM
Computer: toni-nb-lenovo
Description:
Installation erfolgreich: Das folgende Update wurde installiert. 9P6CT0SLW589-Microsoft.LanguageExperiencePackde-DE
Und so sieht es aus:
Event
Log Name: System
Source: Microsoft-Windows-WindowsUpdateClient
Date: 2023-02-06T10:12:00.6720000Z
Event ID: 19
Task: Windows Update-Agent
Level: Informationen
Opcode: Installation
Hat jemand eine Idee, woran es liegen könnte? (oder kennt jemand eine Alternative?)
MFG Toni
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 5908037425
Url: https://administrator.de/contentid/5908037425
Ausgedruckt am: 23.11.2024 um 16:11 Uhr
6 Kommentare
Neuester Kommentar
Zitat von @twiedemann:
Hat jemand eine Idee, woran es liegen könnte? (oder kennt jemand eine Alternative?)
MFG Toni
Hier funktioniert es ohne extra Module mit Get-WinEvent und Send-MailMessage.Hat jemand eine Idee, woran es liegen könnte? (oder kennt jemand eine Alternative?)
MFG Toni
Gruß Spec
Zitat von @twiedemann:
Get-WinEvent und Get-EventLog verursachen folgenden Mail-Text:
System.Diagnostics.Eventing.Reader.EventLogRecord
Get-WinEvent und Get-EventLog verursachen folgenden Mail-Text:
System.Diagnostics.Eventing.Reader.EventLogRecord
Das ist dann aber ein Anwenderfehler
Zitat von @twiedemann:
Leider nein. Send-MailMessage wird von MS nicht mehr empfohlen (und funktioniert auch nicht mit meinem Mail-Provider), man soll MailKit verwenden. Und Get-WinEvent und Get-EventLog verursachen folgenden Mail-Text:
System.Diagnostics.Eventing.Reader.EventLogRecord
Leider nein. Send-MailMessage wird von MS nicht mehr empfohlen (und funktioniert auch nicht mit meinem Mail-Provider), man soll MailKit verwenden. Und Get-WinEvent und Get-EventLog verursachen folgenden Mail-Text:
System.Diagnostics.Eventing.Reader.EventLogRecord
Ach was MS empfiehlt 🙄, wenn du eine Exchange/Postfix/SMTP Relay hast ist das immer noch in Ordnung.
Gruß Spec
Zitat von @twiedemann:
Und Get-WinEvent und Get-EventLog verursachen folgenden Mail-Text:
System.Diagnostics.Eventing.Reader.EventLogRecord
Nö du musst Objekte halt in Strings umwandeln sonst weiß die Powershell halt nicht wie sie das Objekt als String ausgeben soll und gibt stattdessen den Klassennamen des Objekts aus ...:Und Get-WinEvent und Get-EventLog verursachen folgenden Mail-Text:
System.Diagnostics.Eventing.Reader.EventLogRecord
$event = Get-WinEvent -LogName System -FilterXPath "*[System[Provider[@Name='Microsoft-Windows-WindowsUpdateClient'] and Task = 1 and (EventID=19)]]" -MaxEvents 1 | %{
$xml = [xml]$_.toXML()
$object = [ordered]@{TimeCreated = $_.TimeCreated}
'Computer','EventID','Level','EventRecordID'| %{$object.$_ = $xml.Event.System.$_}
$xml.Event.EventData.Data.GetEnumerator() | %{$object.($_.Name) = $_.innerText}
[pscustomobject]$object
} | format-list * | out-string
$event
Btw. würde ich dafür ja gleich nen Tasktrigger verwenden da kann man die Variablen auch direkt übergeben und man muss nicht erneut die Events abfragen ...
Wurstel.