Top-Themen

Aktuelle Themen (A bis Z)

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

Frage Entwicklung Batch & Shell

GELÖST

Powershell - Events mehrerer Server sammeln und in HTML darstellen

Mitglied: lexura

lexura (Level 1) - Jetzt verbinden

03.07.2014, aktualisiert 15:19 Uhr, 1774 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
HTML in Powershell
gelöst Frage von michi-ffmBatch & Shell8 Kommentare

Hallo Zusammen, vielleicht kann mir jemand behilflich sein? Wie bekomme ich das hin, das in der eMail folgendes passiert: ...

PHP
PHP Array in einer HTML Tabelle darstellen
gelöst Frage von spcvltPHP2 Kommentare

Hallo, ich versuche mich aktuell etwas mit PHP und bin noch sehr am Anfang. Kann mir vielleicht jemand sagen ...

Batch & Shell
Powershell Mousedown Event
gelöst Frage von SaschaRDBatch & Shell2 Kommentare

Hallo zusammen, kennt jemand das Pendat zu diesem Code?: Suche dieselbe Funktion in Powershell (der o.g. Code ist VB). ...

Microsoft Office
Maximalwerte aus mehreren .txt Dateien Sammeln
gelöst Frage von RolforMicrosoft Office2 Kommentare

Hallo! Habe leider sehr wenig erfahrung mit Excel und Makros und hoffe ich suche hier an der richtigen Stelle ...

Neue Wissensbeiträge
Datenschutz

Teamviewer kommt für IoT-Geräte wie den Raspberry Pi

Information von magicteddy vor 5 StundenDatenschutz

Moin, jetzt werden IoT Geräte endgültig zur Wanze? Anscheinend kann man auf einem Dashboard seine Geräte visualisieren Ich stelle ...

Microsoft

Letzte Updates für Win10 und Server2016 müssen bei Bedarf über den Update catalogue in den WSUS importiert werden!

Tipp von DerWoWusste vor 10 StundenMicrosoft1 Kommentar

automatisch kommt da nichts an im WSUS und auch nicht im SCCM. Siehe Hinweise zum Bezug der jeweils neuesten ...

Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 3 TagenLinux

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 4 TagenTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Preis für Wartungsvertrag ok?
gelöst Frage von a-za-zNetzwerkmanagement22 Kommentare

Hallo! Mal ne Frage, weil ich mich mit dem akzeptablen Preis für einen Reaktionszeitvertrag nicht auskenne. Meine Firma hat ...

Windows Netzwerk
Ist ein Portforwarding auf einen PC ohne lauschendes Programm ein (großes) Sicherheitsproblem?
Frage von PluwimWindows Netzwerk13 Kommentare

Hallo zusammen, zur Fernwartung eines Rechners an einem anderen Ort nutze ich VNC. Da dieser Rechner einfach nur eine ...

Windows Server
Terminal Server 2016 erkennt Berechtigungen nicht
gelöst Frage von Thomas2Windows Server10 Kommentare

Hallo Administratoren, folgendes Problem stellt sich dar: Es gibt zwei Windows Server 2016, die als Terminal Server fungieren. Jetzt ...

SAN, NAS, DAS
Wer kennt sich mit QNAP und CISCO aus ?
gelöst Frage von MachelloSAN, NAS, DAS10 Kommentare

Hallo Zusammen hier im Forum, Ich habe ein QNas 451+ und dieses NAS hat zwei GBit Lan Adapter die ...