Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Powershell - Events mehrerer Server sammeln und in HTML darstellen

Frage Entwicklung Batch & Shell

Mitglied: lexura

lexura (Level 1) - Jetzt verbinden

03.07.2014, aktualisiert 15:19 Uhr, 1746 Aufrufe, 1 Kommentar, 1 Danke

Hallo, ich bin immer noch Neuling auf dem Gebiet Powershell. Als erste Aufgabe wollte ich mir ein Script schreiben, womit ich die Eventprotokolle meiner zu betreuenden Server auslesen kann, um sie dann in einer HTML Seite darzustellen. Dies ist mir auch gelungen. Zwar nicht sonderlich hübsch, aber es erfüllt seinen Zweck.
Ein Problem bekomm ich aber leider nicht gelöst:
Ein paar Event-Einträge kommen ständig und können aber grundsätzlich vernachlässigt werden. Diese möchte ich mir dann auch gar nicht anzeigen lassen, also gleich rausfiltern. Das filtern mehrerer Einträge habe ich nicht hinbekommen. Ein Einzelnen Eintrag zu filtern klappte ( $_.Message -notmatch "Unexpected failure. Error code: 490@01010004"} | ), ich brauch aber die Möglichkeit, mehrere Einträge zu filtern. Hoffe mir kann hier wieder jemand auf die Sprünge helfen.
Sollte hier noch jemand grundsätzliche Verbesserungen an meinem Script haben, bin ich na klar für alles dankbar.

Besten DANK im voraus...

Gruß Ralf

SCRIPT:

  1. Deklarieren der Variablen
$Datum = Get-Date -Format F

$Ueberschrift = "<h1 ALIGN=CENTER>ALLE SQL-SERVER-EVENTS DER LETZTEN 20 TAGE</h1>"
$Erstell_Dat = "<h3 ALIGN=CENTER>Erstellungsdatum:$Datum</h3>"

$S_SERVER = "<h1 ALIGN=CENTER>SQL - SERVER (virtuell)</h1>"
$M_SERVER = "<h1 ALIGN=CENTER>MANAGEMENT - SERVER (virtuell)</h1>"



  1. Serielles auslesen der SQL-Server - Events von System und Application
  1. Server 1 = SQLSRV01

[Array]$SRV_01 = $null

$SRV_01 += Invoke-Command -ComputerName SQLSRV01 { Get-EventLog -logname System -Newest 20 } |

Where-Object {
$_.EntryType -eq "Critical" -or
$_.EntryType -eq "Error" -or
$_.EntryType -eq "Warning" -and

$_.Message -notmatch "Unexpected failure. Error code: 490@01010004"} |

Sort-Object TimeWritten -Descending |

ConvertTo-Html -Property TimeWritten, EntryType, EventID, Source, Message -Fragment -PreContent "<h2>SQLSRV01 - SYSTEM EVENTS</h2>" -PostContent "<br>" |
foreach {
if ($_ -like "*<td>Critical</td>*") {$_ -replace "<tr>","<tr bgcolor=#FF3333>"}
elseif ($_ -like "*<td>Error</td>*") {$_ -replace "<tr>","<tr bgcolor=#FF6666>"}
elseif ($_ -like "*<td>Warning</td>*") {$_ -replace "<tr>","<tr bgcolor=#FFFF66>"}

else {$_ -replace "<tr>","<tr bgcolor=#33FFFF>"}}


$SRV_01 += Invoke-Command -ComputerName SQLSRV01 { Get-EventLog -logname Application -After (Get-Date).AddDays(-20) -Before (Get-Date) } |

Where-Object {
$_.EntryType -eq "Critical" -or
$_.EntryType -eq "Error" -or
$_.EntryType -eq "Warning" } |

Sort-Object TimeWritten -Descending |

ConvertTo-Html -Property TimeWritten, EntryType, EventID, Source, Message -Fragment -PreContent "<h2>SQLSRV01 - APPLICATION EVENTS</h2>" -PostContent "<br>" |
foreach {
if ($_ -like "*<td>Critical</td>*") {$_ -replace "<tr>","<tr bgcolor=#FF3333>"}
elseif ($_ -like "*<td>Error</td>*") {$_ -replace "<tr>","<tr bgcolor=#FF6666>"}
elseif ($_ -like "*<td>Warning</td>*") {$_ -replace "<tr>","<tr bgcolor=#FFFF66>"}

else {$_ -replace "<tr>","<tr bgcolor=#33FFFF>"}}


  1. Server 2 = SQLSRV02

[Array]$SRV_02 = $null

$SRV_02 += Invoke-Command -ComputerName SQLSRV02 { Get-EventLog -logname System -After (Get-Date).AddDays(-20) -Before (Get-Date) } |

Where-Object {
$_.EntryType -eq "Critical" -or
$_.EntryType -eq "Error" -or
$_.EntryType -eq "Warning" -and

$_.Message -notmatch "Unexpected failure. Error code: 490@01010004"} |

Sort-Object TimeWritten -Descending |

ConvertTo-Html -Property TimeWritten, EntryType, EventID, Source, Message -Fragment -PreContent "<h2>SQLSRV02 - SYSTEM EVENTS</h2>" -PostContent "<br>" |
foreach {
if ($_ -like "*<td>Critical</td>*") {$_ -replace "<tr>","<tr bgcolor=#FF3333>"}
elseif ($_ -like "*<td>Error</td>*") {$_ -replace "<tr>","<tr bgcolor=#FF6666>"}
elseif ($_ -like "*<td>Warning</td>*") {$_ -replace "<tr>","<tr bgcolor=#FFFF66>"}

else {$_ -replace "<tr>","<tr bgcolor=#33FFFF>"}}


$SRV_02 += Invoke-Command -ComputerName SQLSRV02 { Get-EventLog -logname Application -After (Get-Date).AddDays(-20) -Before (Get-Date) } |

Where-Object {
$_.EntryType -eq "Critical" -or
$_.EntryType -eq "Error" -or
$_.EntryType -eq "Warning" } |

Sort-Object TimeWritten -Descending |

ConvertTo-Html -Property TimeWritten, EntryType, EventID, Source, Message -Fragment -PreContent "<h2>SQLSRV02 - APPLICATION EVENTS</h2>" -PostContent "<br>" |
foreach {
if ($_ -like "*<td>Critical</td>*") {$_ -replace "<tr>","<tr bgcolor=#FF3333>"}
elseif ($_ -like "*<td>Error</td>*") {$_ -replace "<tr>","<tr bgcolor=#FF6666>"}
elseif ($_ -like "*<td>Warning</td>*") {$_ -replace "<tr>","<tr bgcolor=#FFFF66>"}

else {$_ -replace "<tr>","<tr bgcolor=#33FFFF>"}}


  1. Serielles auslesen des MANAGEMENT-Servers - Events von System und Application
  1. Server 03 = MANAGESRV03

[Array]$SRV_03 = $null

$SRV_03 += Invoke-Command -ComputerName MANAGESRV03 { Get-EventLog -logname System -After (Get-Date).AddDays(-20) -Before (Get-Date) } |

Where-Object {
$_.EntryType -eq "Critical" -or
$_.EntryType -eq "Error" -or
$_.EntryType -eq "Warning" -and

$_.Message -notmatch "Unexpected failure. Error code: 490@01010004"} |

Sort-Object TimeWritten -Descending |

ConvertTo-Html -Property TimeWritten, EntryType, EventID, Source, Message -Fragment -PreContent "<h2>MANAGESRV03 - SYSTEM EVENTS</h2>" -PostContent "<br>" |
foreach {
if ($_ -like "*<td>Critical</td>*") {$_ -replace "<tr>","<tr bgcolor=#FF3333>"}
elseif ($_ -like "*<td>Error</td>*") {$_ -replace "<tr>","<tr bgcolor=#FF6666>"}
elseif ($_ -like "*<td>Warning</td>*") {$_ -replace "<tr>","<tr bgcolor=#FFFF66>"}

else {$_ -replace "<tr>","<tr bgcolor=#33FFFF>"}}


$SRV_03 += Invoke-Command -ComputerName MANAGESRV03 { Get-EventLog -logname Application -After (Get-Date).AddDays(-20) -Before (Get-Date) } |

Where-Object {
$_.EntryType -eq "Critical" -or
$_.EntryType -eq "Error" -or
$_.EntryType -eq "Warning" } |

Sort-Object TimeWritten -Descending |

ConvertTo-Html -Property TimeWritten, EntryType, EventID, Source, Message -Fragment -PreContent "<h2>MANAGESRV03 - APPLICATION EVENTS</h2>" -PostContent "<br>" |
foreach {
if ($_ -like "*<td>Critical</td>*") {$_ -replace "<tr>","<tr bgcolor=#FF3333>"}
elseif ($_ -like "*<td>Error</td>*") {$_ -replace "<tr>","<tr bgcolor=#FF6666>"}
elseif ($_ -like "*<td>Warning</td>*") {$_ -replace "<tr>","<tr bgcolor=#FFFF66>"}

else {$_ -replace "<tr>","<tr bgcolor=#33FFFF>"}}


ConvertTo-Html -Title "Eventübersicht" -body "$Ueberschrift $Erstell_Dat <br/> <hr NOSHADE SIZE=6 WIDTH=80% COLOR=#0033CC /> <br/>
$S_SERVER <br/> $SRV_01 <br/> <hr NOSHADE SIZE=3 WIDTH=80% COLOR=#0033CC /> <br/> $SRV_02 <br/> <hr NOSHADE SIZE=8 WIDTH=80% COLOR=#0033CC /> <br/> <br/> <br/>
$M_SERVER <br/> $SRV_03" |

Out-File D:\HTML\TEMP_EVENT.html
Mitglied: colinardo
LÖSUNG 03.07.2014, aktualisiert um 15:19 Uhr
Moin lexura,
ich brauch aber die Möglichkeit, mehrere Einträge zu filtern. Hoffe mir kann hier wieder jemand auf die Sprünge helfen.
du kannst mit -notmatch auch mehrere Einträge ausfiltern. Dazu hast du mehrere Möglichkeiten:
1. Du hängst alle Einträge mit -and hintereinander:
$_.Message -notmatch "Dich nicht" -and  $_.Message -notmatch "Dich auch nicht"
was aber ein längeres unübersichtliches Konstrukt ergibt.

2. Du benutzt Regex-Syntax in -notmatch. Du solltest unbedingt wissen das alles was du in den String hinter notmatch eingibst der Regular-Expression Syntax folgt, d.h. bestimmte Sonderzeichen haben eine spezielle Bedeutung. Z.b entspricht ein Punkt nicht einem Punkt sondern bedeutet "Matche einen beliebigen Buchstaben". Mehr zu Regex-Syntax kannst du hier nachlesen: Regular Expressions Tutorial. Sollte dich das überfordern nutze stattdessen den Operator -notlike der Strings als Strings behandelt.

Mit Regex hast du die Möglichkeit ein Oder zu benutzen um einen von mehreren Strings zu matchen. Dazu trennst du die Strings mit einer Pipe voneinander:
$_.Message -notmatch "Dich nicht|Dich auch nicht|Noch einer nicht"
Zum Code selber sage ich jetzt erst mal nichts weiter, da man immer etwas verbessern kann.
Bitte nutze Code-Tags für deinen Quellcode: <code> Quellcode </code>, ansonsten kommen uns hier eventuell wichtige Sonderzeichen abhanden.

Zur Info: Wie man Events schon im vornherein exakter mit Get-WinEvent und dem Parameter -FilterXPath ausfiltern kann, kannst du hier nachlesen: http://www.administrator.de/contentid/237154

Hier noch ein Tipp um die HTML-Ausgabe übersichtlicher zu gestalten indem man das HTML selber aufbaut, dann hat man das Design besser im Griff:
http://www.administrator.de/contentid/240827#comment-929494


Grüße Uwe
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
gelöst HTML in Powershell (8)

Frage von michi-ffm zum Thema Batch & Shell ...

Batch & Shell
Powershell-Abfrage "Die 10 meisten fehlgeschlagenen Events" (2)

Frage von KMP1988 zum Thema Batch & Shell ...

Batch & Shell
gelöst Update mehrerer Verzeichnisse auf FTP-Server (3)

Frage von caspi-pirna zum Thema Batch & Shell ...

Windows Server
gelöst Core Server 2012R2 - GUI mit Powershell nachinstallieren - korrekte Pfadangabe (2)

Frage von takvorian zum Thema Windows Server ...

Neue Wissensbeiträge
Tipps & Tricks

Wie Hackt man sich am besten in ein Computernetzwerk ein

(38)

Erfahrungsbericht von Herbrich19 zum Thema Tipps & Tricks ...

Humor (lol)

Bester Vorschlag eines Supporttechnikers ever: APC

(15)

Erfahrungsbericht von DerWoWusste zum Thema Humor (lol) ...

Heiß diskutierte Inhalte
Festplatten, SSD, Raid
POS Hardware und alternativen zu Raid 1? (21)

Frage von Brotkasten zum Thema Festplatten, SSD, Raid ...

Viren und Trojaner
Verschlüsselungstrojaner simulieren (15)

Frage von AlbertMinrich zum Thema Viren und Trojaner ...

ISDN & Analoganschlüsse
gelöst Splitter - RJ45 zu RJ11? (14)

Frage von Waishon zum Thema ISDN & Analoganschlüsse ...

Rechtliche Fragen
Hotspot rechtssicher betreiben? (14)

Frage von xSiggix zum Thema Rechtliche Fragen ...