Eventlog Auswertung der Exchange Umgebung

Dieses Script habe ich erstellt um die Eventlogs meiner Exchange Umgebung zu überprüfen. Es hilft mir häufig bei grösseren Umgebungen meine Arbeit effizient zu erledigen. Da ich das Skript nutze um Fehler aufzufinden, prüft das Skript nur die letzten 24 Stunden.

<#
.SYNOPSIS
  Exchange Server Eventlog Script
.DESCRIPTION
  Find all Exchange Server and greps the eventlog and show the output in a html file
.PARAMETER $trustcert
    none
.INPUTS
  none
.OUTPUTS
  Log file stored in the foler from where you run the script
.NOTES
  Version:        1.0
  Author:         Claudius Rücker
  Creation Date:  16.02.2021
  Purpose/Change: none
  
.EXAMPLE
  .get-eventlog.ps1
#>
### 
#hole die Exchange Server
$exservers = @()
$exservers = Get-ADGroup -Identity "Exchange Servers" |Get-ADGroupMember
$exservertoconect = $exservers[0].name
#load EMS
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://$exservertoconect/PowerShell/ -Authentication Kerberos
Import-PSSession $Session -DisableNameChecking
$time = (Get-Date) - (New-TimeSpan -Day 1)
$Ergebnisse = @()
$serverliste = get-exchangeserver
$serverliste | foreach {
                        Invoke-Command -ComputerName $_ -Command {Get-WinEvent –FilterHashtable @{logname='application'; Level=1; starttime=$using:time}} -AsJob
                        Invoke-Command -ComputerName $_ -Command {Get-WinEvent –FilterHashtable @{logname='application'; Level=2; starttime=$using:time}} -AsJob
                        Invoke-Command -ComputerName $_ -Command {Get-WinEvent –FilterHashtable @{logname='application'; Level=3; starttime=$using:time}} -AsJob
                        Invoke-Command -ComputerName $_ -Command {Get-WinEvent –FilterHashtable @{logname='system'; Level=1; starttime=$using:time}} -AsJob
                        Invoke-Command -ComputerName $_ -Command {Get-WinEvent –FilterHashtable @{logname='system'; Level=2; starttime=$using:time}} -AsJob
                        Invoke-Command -ComputerName $_ -Command {Get-WinEvent –FilterHashtable @{logname='system'; Level=3; starttime=$using:time}} -AsJob
                        }
#auf Abarbeitung des Jobs warten
Get-Job | Wait-Job
Get-Job | ForEach-Object {Try
                          {$Ergebnisse += Receive-Job -Job $_ -ErrorAction:Stop }
                          
                          catch [System.Management.Automation.RemoteException] {
                                                                                write-host "On server:" $Error[0].OriginInfo.PSComputerName $Error[0].Exception.Message -ForegroundColor yellow                                                                               }
                                                                                }
#Jobs entfernen
get-job | remove-job
#Fehler aufbereiten und Gruppieren
$fehler = $ergebnisse | select PSComputerName, TimeCreated, LevelDisplayName, LogName, Id, ProviderName, Message 
$fehlerAnzahl = ($fehler).count
$GruppierteFehler = $fehler | Group-Object -Property ID, PSComputername
#Fehler Zusammenfassen
$outputfehler = @()
foreach ($Gfehler in $GruppierteFehler) {
                                            $outputfehler += [PSCustomObject]@{
                                                'Anzahl' = $Gfehler.Count
                                                'ComputerName' = $GFehler[0].Group[0].PSComputerName
                                                'Time' = $GFehler[0].Group[0].TimeCreated
                                                'Name' = $GFehler[0].Group[0].LevelDisplayName
                                                'Log' = $GFehler[0].Group[0].LogName
                                                'ID' = $GFehler[0].Group[0].ID
                                                'Message' = $GFehler[0].Group[0].Message
                                                }
                                        }
$outputfehler | ft
$precontent = “List of Errrors on Exchange Eventlog”
$htmlParams = @{
  Body = Get-Date
  PreContent = $precontent
  PostContent = "Es wurden seit dem " + "$time " + "$fehlerAnzahl " + "Fehler auf den Exchange Servern gefunden"
  Head = “<title>Applog Errors</title><style>table, th, td {border: 1px solid;}</style >”
}
$outputfehler | select |ConvertTo-Html @htmlParams | Out-File Eventlog.htm
Invoke-Item Eventlog.htm

Beste Grüsse
Claudius

Eventlog Auswertung der Exchange Umgebung

| Exchange, PowerShell | 0 Comments
About The Author
- Senior Exchange Engineer Im Bereich Exchange und O365 unterwegs, hauptsächlich bei grösseren Kunden. Im Bereich Exchange unterwegs seit ~2003 angefangen mit Exchange 5.5 bis nun Exchange 2019. Früher auch im Bereich Lync und Skype unterwegs gewesen. Motorrad-Enthusiast

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>