-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathEventlog.ps1
155 lines (115 loc) · 5.69 KB
/
Eventlog.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
###################################### Report Logging Veeam ################################################
#Bereitstellung der Reports von Veeam
#
#
#Von
#Christian Heinrich
###################################### Konfiguration #######################################################
$Debug = "true" ### Debug modus
$ZeitSpanne = "-10" ### Lese alles vor x Minuten
$replaceFailed = "Failed-Error" ### Textplatzhalter für Failed Ergebniss
$replaceSuccess = "Success-Info" ### Textplatzhalter für Failed Ergebniss
$ReplaceNoneStatus = "Success-Info" ### Textplatzhalter für Failed Ergebniss
#############################################################################################################
######################################### Version Check V11 #################################################
$corePath = Get-ItemProperty -Path "HKLM:\Software\Veeam\Veeam Backup and Replication\" -Name "CorePath"
$depDLLPath = Join-Path -Path $corePath.CorePath -ChildPath "Packages\VeeamDeploymentDll.dll" -Resolve
$file = Get-Item -Path $depDLLPath
$version = $file.VersionInfo.ProductVersion # Abrufen der Veeam Version
$psVersion = "11" ## Version die erförderlich ist
echo "Aktuelle Veeam Version: $version"
echo "Kompatible Powershell Version: $psVersion"
if($version -match $psVersion){
Write-Host "Script läuft auf der richtigen Version " -ForegroundColor Green
}
else {
### Lade Snap IN Veeam Powershell ###
Write-Host "[Achtung] Falsche Version .... Veeam Version: $version" -ForegroundColor Red
Write-Host "[Achtung] Starte alter Script.... Bitte warten!" -ForegroundColor Yellow
function Set-Fix {
[cmdletbinding()]
param(
[Parameter(Position=0, Mandatory=$false)]
[string] $BRHost = "$env:computername") #### Host zum Veeam Backup Server login wird Local nicht benötigt
}
if (!(Get-PSSnapin -Name VeeamPSSnapIn -ErrorAction SilentlyContinue)) {
if (!(Add-PSSnapin -PassThru VeeamPSSnapIn)) {
# Error out if loading fails
Write-Error "`nFehler: Veeam Snapin kann nicht Installiert werden."
Exit
}
}
}
$TableName = "Backup Report"
#Erstelle Tabellen-Objekt
$table = New-Object system.Data.DataTable “$TableName”
#Definiere spalten
$col1 = New-Object system.Data.DataColumn Date,([string])
$col2 = New-Object system.Data.DataColumn Message,([string])
#Spalten hinzufügen
$table.columns.add($col1)
$table.columns.add($col2)
for($i=1) {
$allSesh = Get-VBRBackupSession
$seshListBk = @($allSesh | Where-Object {( $_.EndTime -ge (Get-Date).Addminutes($ZeitSpanne))}) # Fange alle Backups von der 10Minuten
###########################################################################
foreach ($BackupJob in $seshListBk)
{
$jobTime = $BackupJob.Endtime ### Alle Informationen von EndTime, Name, Result ausgeben
$jobName = $BackupJob.JobName
$lastResult = $BackupJob.Result | Select -First 1
$FailedReason = $BackupJob.GetTaskSessionsByStatus("Failed").info.reason | Select -First 1
if ( $JobType -eq "BackupSync" ){ ## Wenn Job Typ nicht BackupSync ist wird der die VMS nicht ausgelesen
if ( $lastResult -eq "Failed") { ## Wenn der Job Failed ausgibt werden die VMS ausgelesen
foreach ($failedVM in $seshListBk.GetTaskSessionsByStatus("Failed"))
{
$endResultVM = $failedVM.info.reason
$endStateVM = $failedVM.Status
}
}
if ( $lastResult -eq "Warning" ){ ## Wenn der Job Warning ausgibt werden die VMS ausgelesen
foreach ($failedVM in $seshListBk.GetTaskSessionsByStatus("Warning"))
{
$endResultVM = $failedVM.info.reason
$endStateVM = $failedVM.Status
}
}
# if ( $lastResult = "Warning" ){ ## Wenn der Job Warning ausgibt werden die VMS ausgelesen
# foreach ($failedVM in $seshListBk.GetTaskSessionsByStatus(""))
# {
# $endResultVM = $failedVM.info.reason
# $endStateVM = "Unbekannt"
# }
# }
}
$formatEndStateVM = $endStateVM | Select -First 1
$JobType = $BackupJob.JobType
$FTime = get-date $jobTime -Format "dd.MM.yyyy HH:mm:ss" ## Formatiert Zeit richtig
if ( $JobType -eq "BackupSync" ){
$EndResult = "$FTime [ $formatEndStateVM ] $jobName $endResultVM" -replace "Success","$replaceSuccess" -replace "Failed","$replaceFailed" ### Erstelle ein end-ergebniss von JobTime, Result, JobName, Reason... wenn Success soll ersetzt werden durch Success-Info für grafana
} else {
$EndResult = "$FTime [ $lastResult ] $jobName $FailedReason" -replace "Success","$replaceSuccess" -replace "Failed","$replaceFailed" -replace "none","$ReplaceNoneStatus" ### Erstelle ein end-ergebniss von JobTime, Result, JobName, Reason... wenn Success soll ersetzt werden durch Success-Info für grafana
}
if ($Debug -eq "True" -eq "true"){
Write-Host "$Date $EndResult"
}
#Vorbereitung eine neue Zeile
$row = $table.NewRow()
$row.Date = "$Date"
$row.Message = "$EndResult" -replace "[ ] "," $ReplaceNoneStatus "
$table.Rows.Add($row)
#Zeile hinzufügen zur Tabelle
}
########################################################################
###########################################
## Ausgabe wird Ausgegeben (DEBUG) Optional
if ($Debug -eq "True" -eq "true") {
$table | format-table -Wrap
}
###########################################
# Exportieren in eine CSV für den Telegrafen
$tabCsv = $table | export-csv "C:\Telegraf\logging.csv" -noType
Write-Host Fertig!
Write-Host Warte auf nächste Abfragezyklus
Start-Sleep -s 15
}