Ich habe mich sehr über das breite Feedback zu meinem Artikel PRTG – Veeam B&R Monitoring gefreut. Klar wurde mir dabei jedoch auch, dass der Einsatz des Veeam Enterprise Servers mit der freigeschalteten RESTful API gar nicht so verbreitet ist.
Daher habe ich mich an eine neue Variante des PRTG Veeam Advanced Sensor gesetzt – den Veeam PRTG Sensor Reloaded.
Anforderung an neuen Sensor:
- Verwendung der Veeam PowerShell SnapIn
- Ziel Server (Veeam Backup & Replication Server) als Parameter
- Repository Nutzung reporten
- Leichte Erweiterbarkeit
Sehr schnell hat sich allerdings ein grundlegendes Problem des Veeam PowerShell Plugin in Verbindung mit PRTG aufgetan:
Das Veeam PowerShell Plugin ist 64 Bit only und PRTG führt alle Scripte auf der Probe nur in 32 Bit aus.
Nach etwas Recherche und Tests fand ich das Tool PSx64 von PRTG Tools Family (@prtgtoolsfamily) als eine wirklich robuste und gute Lösung des Problems.
Veeam PRTG Sensor Reloaded – Einrichtung
Um das 64 Bit Problem zu umgehen wird die PSx64 EXE mit dem Veeam PRTG Sensor Reloaded PowerShell Script als Parameter in einem Advanced Sensor eingebunden:
Der Aufruf kann auch noch PowerShell Parameter beinhalten (hier der Veeam B&R Server FQDN):
Parameter der PSx64.exe:
- -f= PowerShell Script
- -p= Parameter für das Script – z.B. „-BRHost veeam01.lan.local“
Da die PowerShell Session Credentials zum Verbindungsaufbau zum Veeam Backup & Recovery Server verwendet werden, sollten hier passende in PRTG eingetragen werden und mit der Option „use Windows credentials of parent device“ genutzt werden.
Veeam PRTG Sensor Reloaded – Das Script
<# .SYNOPSIS PRTG Veeam Advanced Sensor .DESCRIPTION Advanced Sensor will Report Statistics about Backups during last 24 Hours and Actual Repository usage. .EXAMPLE PRTG-VeeamBRStats.ps1 -BRHost veeam01.lan.local .EXAMPLE PRTG-VeeamBRStats.ps1 -BRHost veeam01.lan.local -reportmode "Monthly" -repoCritical 80 -repoWarn 70 -Debug .EXAMPLE PRTG-VeeamBRStats.ps1 -BRHost veeam01.lan.local -reportmode "Monthly" -repoCritical 80 -repoWarn 70 -selChann "BR" .Notes NAME: PRTG-VeeamBRStats.ps1 LASTEDIT: 02/08/2018 VERSION: 1.8 KEYWORDS: Veeam, PRTG CREDITS: Thanks to Shawn, for creating an awsome Reporting Script: Veeam v9 – My Veeam Report v9.0.1 Thanks to Bernd Leinfelder for the Scalout Repository part! https://github.com/berndleinfelder Thanks to Guy Zuercher for the Endpoint Backup part and a lot of other enhancmeents! https://github.com/gzuercher .Link http://mycloudrevolution.com/ #> #Requires -Version 3 [cmdletbinding()] param( [Parameter(Position=0, Mandatory=$false)] [string] $BRHost = "localhost", [Parameter(Position=1, Mandatory=$false)] $reportMode = "24", # Weekly, Monthly as String or Hour as Integer [Parameter(Position=2, Mandatory=$false)] $repoCritical = 10, [Parameter(Position=3, Mandatory=$false)] $repoWarn = 20, [Parameter(Position=4, Mandatory=$false)] $selChann = "BCRE" # Inital channel selection ) $includeBackup = $selChann.Contains("B") $includeCopy = $selChann.Contains("C") $includeRepl = $selChann.Contains("R") $includeEP = $selChann.Contains("E") # Disable output of warning to prevent Veeam PS quirks $WarningPreference = "SilentlyContinue" # Big thanks to Shawn, creating an awsome Reporting Script: # http://blog.smasterson.com/2016/02/16/veeam-v9-my-veeam-report-v9-0-1/ #region: Start Load VEEAM Snapin (if not already loaded) if (!(Get-PSSnapin -Name VeeamPSSnapIn -ErrorAction SilentlyContinue)) { try { $Trash = Add-PSSnapin -PassThru VeeamPSSnapIn -ErrorAction Stop } catch { Write-Error "Failed to load VeeamPSSnapIn" Write-Output "<prtg>" Write-Output " <error>1</error>" Write-Output " <text>Failed to load VeeamPSSnapIn</text>" Write-Output "</prtg>" Exit } } #endregion #region: Functions Function Get-vPCRepoInfo { [CmdletBinding()] param ( [Parameter(Position=0, ValueFromPipeline=$true)] [PSObject[]]$Repository ) Begin { $outputAry = @() Function New-RepoObject {param($name, $repohost, $path, $free, $total) $repoObj = New-Object -TypeName PSObject -Property @{ Target = $name RepoHost = $repohost Storepath = $path StorageFree = [Math]::Round([Decimal]$free/1GB,2) StorageTotal = [Math]::Round([Decimal]$total/1GB,2) FreePercentage = [Math]::Round(($free/$total)*100) } Return $repoObj | Select-Object Target, RepoHost, Storepath, StorageFree, StorageTotal, FreePercentage } } Process { Foreach ($r in $Repository) { # Refresh Repository Size Info try { [Veeam.Backup.Core.CBackupRepositoryEx]::SyncSpaceInfoToDb($r, $true) } catch { Write-Debug "SyncSpaceInfoToDb Failed" } If ($r.HostId -eq "00000000-0000-0000-0000-000000000000") { $HostName = "" } Else { $HostName = $($r.GetHost()).Name.ToLower() } $outputObj = New-RepoObject $r.Name $Hostname $r.Path $r.info.CachedFreeSpace $r.Info.CachedTotalSpace } $outputAry += $outputObj } End { $outputAry } } #endregion #region: Start BRHost Connection Write-Debug "Starting to Process Connection to $BRHost ..." $OpenConnection = (Get-VBRServerSession).Server if($OpenConnection -eq $BRHost) { Write-Debug "BRHost is Already Connected..." } elseif ($OpenConnection -eq $null ) { Write-Debug "Connecting BRHost..." try { Connect-VBRServer -Server $BRHost } catch { Write-Error "Failed to connect to Veeam BR Host" Write-Output "<prtg>" Write-Output " <error>1</error>" Write-Output " <text>Failed to connect to Veeam BR Host</text>" Write-Output "</prtg>" Exit } } else { Write-Debug "Disconnection actual BRHost..." Disconnect-VBRServer Write-Debug "Connecting new BRHost..." try { Connect-VBRServer -Server $BRHost } catch { Write-Error "Failed to connect to Veeam BR Host" Write-Output "<prtg>" Write-Output " <error>1</error>" Write-Output " <text>Failed to connect to Veeam BR Host</text>" Write-Output "</prtg>" Exit } } $NewConnection = (Get-VBRServerSession).Server if ($NewConnection -eq $null ) { Write-Error "Failed to connect to Veeam BR Host" Write-Output "<prtg>" Write-Output " <error>1</error>" Write-Output " <text>Failed to connect to Veeam BR Host</text>" Write-Output "</prtg>" Exit } #endregion #region: Convert mode (timeframe) to hours If ($reportMode -eq "Monthly") { $HourstoCheck = 720 } Elseif ($reportMode -eq "Weekly") { $HourstoCheck = 168 } Else { $HourstoCheck = $reportMode } #endregion #region: Collect and filter Sessions [Array]$repoList = Get-VBRBackupRepository | Where-Object {$_.Type -ne "SanSnapshotOnly"} # Get all Repositories <# Thanks to Bernd Leinfelder for the Scalouts Part! https://github.com/berndleinfelder #> [Array]$scaleouts = Get-VBRBackupRepository -scaleout if ($scaleouts) { foreach ($scaleout in $scaleouts) { $extents = Get-VBRRepositoryExtent -Repository $scaleout foreach ($ex in $extents) { $repoList = $repoList + $ex.repository } } } $allSesh = Get-VBRBackupSession # Get all Sessions (Backup/BackupCopy/Replica) $allEPSesh = Get-VBREPSession # Get all Sessions of Endpoint Backups $SessionObject = [PSCustomObject] @{ } # Filled for debug option #endregion Write-Output "<prtg>" #region: Backup Jobs if ($includeBackup) { $seshListBk = @($allSesh | Where-Object{($_.CreationTime -ge (Get-Date).AddHours(-$HourstoCheck)) -and $_.JobType -eq "Backup"}) # Gather all Backup sessions within timeframe $TotalBackupTransfer = 0 $TotalBackupRead = 0 $seshListBk | ForEach-Object{$TotalBackupTransfer += $([Math]::Round([Decimal]$_.Progress.TransferedSize/1GB, 0))} $seshListBk | ForEach-Object{$TotalBackupRead += $([Math]::Round([Decimal]$_.Progress.ReadSize/1GB, 0))} $successSessionsBk = @($seshListBk | Where-Object{$_.Result -eq "Success"}) $warningSessionsBk = @($seshListBk | Where-Object{$_.Result -eq "Warning"}) $failsSessionsBk = @($seshListBk | Where-Object{$_.Result -eq "Failed"}) $runningSessionsBk = @($allSesh | Where-Object{$_.State -eq "Working" -and $_.JobType -eq "Backup"}) $failedSessionsBk = @($seshListBk | Where-Object{($_.Result -eq "Failed") -and ($_.WillBeRetried -ne "True")}) $Count = $successSessionsBk.Count Write-Output "<result>" " <channel>Successful-Backups</channel>" " <value>$Count</value>" " <showChart>1</showChart>" " <showTable>1</showTable>" "</result>" $Count = $warningSessionsBk.Count Write-Output "<result>" " <channel>Warning-Backups</channel>" " <value>$Count</value>" " <showChart>1</showChart>" " <showTable>1</showTable>" " <LimitMaxWarning>0</LimitMaxWarning>" " <LimitMode>1</LimitMode>" "</result>" $Count = $failsSessionsBk.Count Write-Output "<result>" " <channel>Failes-Backups</channel>" " <value>$Count</value>" " <showChart>1</showChart>" " <showTable>1</showTable>" " <LimitMaxError>0</LimitMaxError>" " <LimitMode>1</LimitMode>" "</result>" $Count = $failedSessionsBk.Count Write-Output "<result>" " <channel>Failed-Backups</channel>" " <value>$Count</value>" " <showChart>1</showChart>" " <showTable>1</showTable>" " <LimitMaxError>0</LimitMaxError>" " <LimitMode>1</LimitMode>" "</result>" $Count = $runningSessionsBk.Count Write-Output "<result>" " <channel>Running-Backups</channel>" " <value>$Count</value>" " <showChart>1</showChart>" " <showTable>1</showTable>" "</result>" Write-Output "<result>" " <channel>TotalBackupRead</channel>" " <value>$TotalBackupRead</value>" " <unit>Custom</unit>" " <customUnit>GB</customUnit>" " <showChart>1</showChart>" " <showTable>1</showTable>" "</result>" Write-Output "<result>" " <channel>TotalBackupTransfer</channel>" " <value>$TotalBackupTransfer</value>" " <unit>Custom</unit>" " <customUnit>GB</customUnit>" " <showChart>1</showChart>" " <showTable>1</showTable>" "</result>" $SessionObject | Add-Member -MemberType NoteProperty -Name "Successful Backups" -Value $successSessionsBk.Count $SessionObject | Add-Member -MemberType NoteProperty -Name "Successful Backups" -Value $successSessionsBk.Count $SessionObject | Add-Member -MemberType NoteProperty -Name "Warning Backups" -Value $warningSessionsBk.Count $SessionObject | Add-Member -MemberType NoteProperty -Name "Failes Backups" -Value $failsSessionsBk.Count $SessionObject | Add-Member -MemberType NoteProperty -Name "Failed Backups" -Value $failedSessionsBk.Count $SessionObject | Add-Member -MemberType NoteProperty -Name "Running Backups" -Value $runningSessionsBk.Count $SessionObject | Add-Member -MemberType NoteProperty -Name "Total Backup Transfer" -Value $TotalBackupTransfer $SessionObject | Add-Member -MemberType NoteProperty -Name "Total Backup Read" -Value $TotalBackupRead } #endregion: #region: Copy Jobs if ($includeCopy) { $seshListBkc = @($allSesh | Where-Object{($_.CreationTime -ge (Get-Date).AddHours(-$HourstoCheck)) -and $_.JobType -eq "BackupSync"}) # Gather all BackupCopy sessions within timeframe $successSessionsBkC = @($seshListBkC | Where-Object{$_.Result -eq "Success"}) $warningSessionsBkC = @($seshListBkC | Where-Object{$_.Result -eq "Warning"}) $failsSessionsBkC = @($seshListBkC | Where-Object{$_.Result -eq "Failed"}) $runningSessionsBkC = @($allSesh | Where-Object{$_.State -eq "Working" -and $_.JobType -eq "BackupSync"}) $IdleSessionsBkC = @($allSesh | Where-Object{$_.State -eq "Idle" -and $_.JobType -eq "BackupSync"}) $failedSessionsBkC = @($seshListBkC | Where-Object{($_.Result -eq "Failed") -and ($_.WillBeRetried -ne "True")}) $Count = $successSessionsBkC.Count Write-Output "<result>" " <channel>Successful-BackupCopys</channel>" " <value>$Count</value>" " <showChart>1</showChart>" " <showTable>1</showTable>" "</result>" $Count = $warningSessionsBkC.Count Write-Output "<result>" " <channel>Warning-BackupCopys</channel>" " <value>$Count</value>" " <showChart>1</showChart>" " <showTable>1</showTable>" " <LimitMaxWarning>0</LimitMaxWarning>" " <LimitMode>1</LimitMode>" "</result>" $Count = $failsSessionsBkC.Count Write-Output "<result>" " <channel>Failes-BackupCopys</channel>" " <value>$Count</value>" " <showChart>1</showChart>" " <showTable>1</showTable>" " <LimitMaxError>0</LimitMaxError>" " <LimitMode>1</LimitMode>" "</result>" $Count = $failedSessionsBkC.Count Write-Output "<result>" " <channel>Failed-BackupCopys</channel>" " <value>$Count</value>" " <showChart>1</showChart>" " <showTable>1</showTable>" " <LimitMaxError>0</LimitMaxError>" " <LimitMode>1</LimitMode>" "</result>" $Count = $runningSessionsBkC.Count Write-Output "<result>" " <channel>Running-BackupCopys</channel>" " <value>$Count</value>" " <showChart>1</showChart>" " <showTable>1</showTable>" "</result>" $Count = $IdleSessionsBkC.Count Write-Output "<result>" " <channel>Idle-BackupCopys</channel>" " <value>$Count</value>" " <showChart>1</showChart>" " <showTable>1</showTable>" "</result>" $SessionObject | Add-Member -MemberType NoteProperty -Name "Warning BackupCopys" -Value $warningSessionsBkC.Count $SessionObject | Add-Member -MemberType NoteProperty -Name "Failes BackupCopys" -Value $failsSessionsBkC.Count $SessionObject | Add-Member -MemberType NoteProperty -Name "Failed BackupCopys" -Value $failedSessionsBkC.Count $SessionObject | Add-Member -MemberType NoteProperty -Name "Running BackupCopys" -Value $runningSessionsBkC.Count $SessionObject | Add-Member -MemberType NoteProperty -Name "Idle BackupCopys" -Value $IdleSessionsBkC.Count } #endregion: #region: Replication Jobs if ($includeRepl) { $seshListRepl = @($allSesh | Where-Object{($_.CreationTime -ge (Get-Date).AddHours(-$HourstoCheck)) -and $_.JobType -eq "Replica"}) # Gather all Replication sessions within timeframe $successSessionsRepl = @($seshListRepl | Where-Object{$_.Result -eq "Success"}) $warningSessionsRepl = @($seshListRepl | Where-Object{$_.Result -eq "Warning"}) $failsSessionsRepl = @($seshListRepl | Where-Object{$_.Result -eq "Failed"}) $runningSessionsRepl = @($allSesh | Where-Object{$_.State -eq "Working" -and $_.JobType -eq "Replica"}) $failedSessionsRepl = @($seshListRepl | Where-Object{($_.Result -eq "Failed") -and ($_.WillBeRetried -ne "True")}) $Count = $successSessionsRepl.Count Write-Output "<result>" " <channel>Successful-Replications</channel>" " <value>$Count</value>" " <showChart>1</showChart>" " <showTable>1</showTable>" "</result>" $Count = $warningSessionsRepl.Count Write-Output "<result>" " <channel>Warning-Replications</channel>" " <value>$Count</value>" " <showChart>1</showChart>" " <showTable>1</showTable>" " <LimitMaxWarning>0</LimitMaxWarning>" " <LimitMode>1</LimitMode>" "</result>" $Count = $failsSessionsRepl.Count Write-Output "<result>" " <channel>Failes-Replications</channel>" " <value>$Count</value>" " <showChart>1</showChart>" " <showTable>1</showTable>" " <LimitMaxError>0</LimitMaxError>" " <LimitMode>1</LimitMode>" "</result>" $Count = $failedSessionsRepl.Count Write-Output "<result>" " <channel>Failed-Replications</channel>" " <value>$Count</value>" " <showChart>1</showChart>" " <showTable>1</showTable>" " <LimitMaxError>0</LimitMaxError>" " <LimitMode>1</LimitMode>" "</result>" $Count = $runningSessionsRepl.Count Write-Output "<result>" " <channel>Running-Replications</channel>" " <value>$Count</value>" " <showChart>1</showChart>" " <showTable>1</showTable>" "</result>" $SessionObject | Add-Member -MemberType NoteProperty -Name "Successful Replications" -Value $successSessionsRepl.Count $SessionObject | Add-Member -MemberType NoteProperty -Name "Warning Replications" -Value $warningSessionsRepl.Count $SessionObject | Add-Member -MemberType NoteProperty -Name "Failes Replications" -Value $failsSessionsRepl.Count $SessionObject | Add-Member -MemberType NoteProperty -Name "Failed Replications" -Value $failedSessionsRepl.Count $SessionObject | Add-Member -MemberType NoteProperty -Name "Running Replications" -Value $RunningSessionsRepl.Count } #endregion: #region: Endpoint Jobs if ($includeEP) { $seshListEP = @($allEPSesh | Where-Object{($_.CreationTime -ge (Get-Date).AddHours(-$HourstoCheck))}) # Gather all Endpoint sessions within timeframe $successSessionsEP = @($seshListEP | Where-Object{$_.Result -eq "Success"}) $warningSessionsEP = @($seshListEP | Where-Object{$_.Result -eq "Warning"}) $failsSessionsEP = @($seshListEP | Where-Object{$_.Result -eq "Failed"}) $runningSessionsEP = @($allEPSesh | Where-Object{$_.State -eq "Working"}) $Count = $successSessionsEP.Count Write-Output "<result>" " <channel>Successful-Endpoints</channel>" " <value>$Count</value>" " <showChart>1</showChart>" " <showTable>1</showTable>" "</result>" $Count = $warningSessionsEP.Count Write-Output "<result>" " <channel>Warning-Endpoints</channel>" " <value>$Count</value>" " <showChart>1</showChart>" " <showTable>1</showTable>" " <LimitMaxWarning>0</LimitMaxWarning>" " <LimitMode>1</LimitMode>" "</result>" $Count = $failsSessionsEP.Count Write-Output "<result>" " <channel>Failes-Endpoints</channel>" " <value>$Count</value>" " <showChart>1</showChart>" " <showTable>1</showTable>" " <LimitMaxError>0</LimitMaxError>" " <LimitMode>1</LimitMode>" "</result>" $Count = $runningSessionsEP.Count Write-Output "<result>" " <channel>Running-Endpoints</channel>" " <value>$Count</value>" " <showChart>1</showChart>" " <showTable>1</showTable>" "</result>" $SessionObject | Add-Member -MemberType NoteProperty -Name "Seccessful Endpoints" -Value $successSessionsEP.Count $SessionObject | Add-Member -MemberType NoteProperty -Name "Warning Endpoints" -Value $warningSessionsEP.Count $SessionObject | Add-Member -MemberType NoteProperty -Name "Failes Endpoints" -Value $failsSessionsEP.Count $SessionObject | Add-Member -MemberType NoteProperty -Name "Running Endpoints" -Value $runningSessionsEP.Count } #endregion: #region: Repository $RepoReport = $repoList | Get-vPCRepoInfo | Select-Object @{Name="Repository Name"; Expression = {$_.Target}}, @{Name="Host"; Expression = {$_.RepoHost}}, @{Name="Path"; Expression = {$_.Storepath}}, @{Name="Free (GB)"; Expression = {$_.StorageFree}}, @{Name="Total (GB)"; Expression = {$_.StorageTotal}}, @{Name="Free (%)"; Expression = {$_.FreePercentage}}, @{Name="Status"; Expression = { If ($_.FreePercentage -lt $repoCritical) {"Critical"} ElseIf ($_.FreePercentage -lt $repoWarn) {"Warning"} ElseIf ($_.FreePercentage -eq "Unknown") {"Unknown"} Else {"OK"}}} | ` Sort-Object "Repository Name" foreach ($Repo in $RepoReport){ $Name = "REPO - " + $Repo."Repository Name" $Free = $Repo."Free (%)" Write-Output "<result>" " <channel>$Name</channel>" " <value>$Free</value>" " <unit>Percent</unit>" " <showChart>1</showChart>" " <showTable>1</showTable>" " <LimitMinWarning>$repoWarn</LimitMinWarning>" " <LimitMinError>$repoCritical</LimitMinError>" " <LimitMode>1</LimitMode>" "</result>" } #endregion Write-Output "</prtg>" #region: Debug if ($DebugPreference -eq "Inquire") { $RepoReport | Format-Table * -Autosize $SessionReport += $SessionObject $SessionReport } #endregion # eof
Vielen Dank auch noch einmal an dieser Stelle an Shawn Masterson (@smasterson24) für die Erstellung dieses großartigen Veeam Reports, aus dem ich mich etwas bedient habe.
Neue Versionen
Das Veeam PRTG Sensor Reloaded Skript wird dank des ständigen Inputs der Nutzer (vielen Dank dafür!) von mir immer wieder etwas aktualisiert.
Version 1.2 – 09.08.2016
- Neu: BackupCopy Sessions
- Optimierung: Ausschluss unbenutzter Daten
- Optimierung: PS Region definitions
- Optimierung: PS Required definitions
Getestet mit Veeam B&R Version 9 Update 1 und Update 2
Version 1.3 – 03.11.2016
- Neu: Debug
- Neu: zusätzliche Parameter „-reportmode -repoCritical -repoWarn“
- Optimierung: Reorganisierung der Regions
Version 1.6 – 06.11.2017
- Neu: Scale Out Repository Extends
- Optimierung: Cmdlet Aliase ersetzt
- Optimierung: SanSnapshotOnly Repositories ausgeschlossen
- Fix: Errorhandling bei nicht verbundenem Repository
Advanced PRTG Sensors GitHub Repository
Wegen der großen Nachfrage, habe ich nun ein GitHub Repositoy der aktuellen Skripte erstellt.
Ich freue mich über jede Teilnahme an diesem kleinen Projekt. Egal ob Pull Request, Bug Report oder Feature Request, alles ist willkommen.
Adam, ein Leser dieses Beitrags hat mich auf ein Problem mit dem Tool PSx64.exe hingewiesen. Wenn in der Ausgabe spezielle Zeichen vorkommen, in seinem Fall „(F:)“, kommt es zu einer fehlerhaften Ausgabe.
Er hat dieses Thema beim Hersteller als Case eingekippt und eine neue Version wurde veröffentlicht.
Hier ein Auszug aus seiner Mail:
PSx64.exe has been updated and a new version posted for download. The new version accepts a parameter/switch that will cause it to pass all PowerShell output unchanged. The parameter is -raw. See below for the email I received back from the developer.
Thanks again for sharing your work!
Hallo Markus,
versuche gerade Dein Script zu testen.
Leider bekomme ich folgenden Fehler im PRTG Sensor:
XML: Das zurückgelieferte XML entspricht nicht dem erwarteten Schema. (Code: PE233) — JSON: Das zurückgelieferte JSON entspricht nicht der erwarteten Struktur (No mapping for the Unicode character exists in the target multi-byte code page). (Code: PE231)
Im Log unter C:ProgramDataPaesslerPRTG Network MonitorLogs (Sensors)
wird diese Fehlermeldung ausgegeben:
Add-PSSnapin : Es wurden keine Snap-Ins für die Windows PowerShell-Version 4 registriert.
In C:Program Files (x86)PRTG Network Monitorcustom sensorsEXEXMLPRTG-VeeamBRStats.ps1:43 Zeichen:8
+ if (!(Add-PSSnapin -PassThru VeeamPSSnapIn)) {
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (VeeamPSSnapIn:String) [Add-PSSnapin], PSArgumentException
+ FullyQualifiedErrorId : AddPSSnapInRead,Microsoft.PowerShell.Commands.AddPSSnapinCommand
C:Program Files (x86)PRTG Network Monitorcustom sensorsEXEXMLPRTG-VeeamBRStats.ps1 : ERROR: Cannot load the VEEAM
Snapin.
In Zeile:1 Zeichen:1
+ &’C:Program Files (x86)PRTG Network Monitorcustom sensorsEXEXMLPRTG-VeeamBR …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,PRTG-VeeamBRStats.ps1
0:
Kannst Du hier helfen?
Gruß Wolfgang
Hallo Wolfgang,
Sehr gerne helfe ich da weiter.
Die Veeam Konsole bzw. das SnapIn ist installiert auf der Probe?
Hast du das Script einmal manuell unter dem Konfigurieren Benutzer auf der Probe ausgeführt?
Hast du den Aufruf in PRTG über die PSx64.exe gemacht?
Ich freue mich über deine Rückmeldung.
Viele Grüße,
Markus
Hallo Markus,
habe mich nun mit dem Thema durch einen Artikel in der It-Administrator wieder beschäftigt.
Nach Installation der Veeam Konsole auf dem Probe Server und Nutzung Deines aktuellen Scripts lief der Sensor sofort.
Nochmal danke für die Unterstützung.
Gerne doch.
Thank you so much for your great work!
This is a much better solution than what we used to do.
Thanks Simon!
New in Version 1.2:
– BackupCopy Sessions
– excluded unused data
– PS Region definitions
– PS Required definitions
Tested with Veeam B&R v9 Update 2 and Update 1
Hallo Markus,
wir suchen einen attraktiven Ersatz für unser ICINGA – Monitoring.
PRTG liefert dort eine Menge an Features mit.
Zur Zeit versuchen wir unsere Veeam Struktur mit PRTG zu überwachen…
Ist das richtig, dass das PS – SnapIn von Veeam auf dem PRTG Server (diesen verwende ich z.Z. als Probe) installiert werden muss?
Sofern ich das verstanden habe, wird über das SnapIn, die API angesteuert, bzw. wird so die Verbindung zu meinem VEEAM Server aufgebaut.
PS: Die anderen Sensoren von dir, interessieren uns zusätzlich. Sofern ich dort Probleme habe, würde ich mich unter den entsprechenden Threads auch noch einmal melden, wenn das i.O. ist. 🙂
Hallo Patrick,
ich selbst habe PRTG als einen sehr guten Ersatz zu NAGIOS kennen gelernt. Natürlich muss man in gewissen Bereichen Abstriche machen. Aber am Ende ist es einfach wesentlich einfacher in der Handhabung.
Genau, das Veeam SnapIn muss auch den Jeweiligen Probe für das System dem der Sensor bzw. das System des Sensors zugeordnet ist. Der Probe kann natürlich auch der PRTG Core sein.
Ich installiere der Einfachheit halber die Veeam Konsole auf den jeweiligen Systemen, somit ist auch ein einfacheres Update des PS SnapIn nach einem Veeam B&R Update möglich (Konsole öffnen und verbinden).
Ich freue mich sehr über jede Rückmeldung und Anregung.
Viele Grüße,
Markus
Hallo Markus,
vielen Dank für die Rückmeldung.
Ich werde es mir gleich Morgen anschauen und erneut testen.
Sicherlich wirst du noch von mir hören. 🙂
Gruß,
Patrick
Hallo Markus,
wie versprochen meine Rückmeldung.
Es sieht bei uns fast gut aus. Im Webinterface vom PRTG wird uns eine Fehlermeldung „..erfordert erhöhte Rechte“ angezeigt.
Uns ist jetzt nicht ganz klar, an welcher Stelle die Berechtigungen fehlen…
Starten wir die PSx64.exe über die Powershell mit den Parametern, die im PRTG hinterlegt werden, bekommen wir auch eine Ausgabe. Hierbei ist es zwingend notwendig, die Powershell als Administrator zu starten..
Hallo Patrick,
leider ist dann wohl die Deaktivierung der UAC notwendig…
Hallo Markus,
erstmal, tolle Arbeit mit dem Script. Ich bekomme es allerdings nicht zum laufen.
PRTG meldet „Dem Client fehlt ein erforderliches Recht. (0x522)“
Mein bisheriges Vorgehen:
1)Veeam B&R Console auf dem Probeserver installiert
– Verbindung mit Veeam Konsole erfolgreich getestet
– Powershell einmal aus der Veeam Konsole gestartet (Wollte noch verifiziert werden.)
2) PSx64 + PS Script in PRTG /EXEXML gespeichert
3) Gerät mit Ping Sensor zum Veeam B&R Server angelegt
– Ping OK
– Windows Anmeldedaten für Veeam Server hinterlegt
4)Script/Programm (Erweitert) Sensor erstellt und nach der obrigen Anleitung erstellt.
Die Windows Ereignisanzeige meldet nichts
Hallo Robert,
vielen Dank!
Hast du mal eine CMD auf deiner Probe als der User der am Device festgelegt wurde („Use Windows credentials of parent device“) gestartet und dann den kompletten Befehl ausgeführt?
Also in dem EXEXML Pfad:
PSx64.exe -f=“PRTG-VeeamBRStats.ps1″ -p=“…“
Hi Markus,
ich habe den Befehl „PSx64.exe -f=“PRTG-VeeamBRStats.ps1″“ einmal als der Benutzer ausgeführt, unter dem auch der Probe Server Service läuft. Da bekomme ich ein Fenster von PSx64 wie es zu verwenden ist.
Kann/Muss ich noch parameter (wie user+pw für Veeam server) für den Test angeben?
Ich bin ja mehr der bash Typ und mache eher selten etwas in batch oder gar PS.
-update-
beim Test habe ich den Befehl falsch geschrieben 🙂
PSx64.exe -f=“PRTG-VeeamBRStats.ps1″ -p=“-BRHost xxx.xxxx.xxx.xxx“
gibt mir schon mal ein „Failed to connect to veeam server..“ zurück.
Wie definiere ich über Parameter die Zugangsdaten für veeam?
Hallo Robert,
so wie ich das sehe fehlt dir nur noch eine Kleinigkeit.
Hat der User mit dem du das ausführst (bzw. als der du die cmd ausgeführt hast) Rechte in Veeam B&R?
Füge den User einfach mal als lokalen Admin auf dem Veeam B&R Server hinzu und teste das noch einmal.
Das direkte „mitgeben“ der Zugangsdaten ist nicht vorgesehen, es werden die Session Credentials genutzt.
Viele Grüße,
Markus
Super danke, hat geklappt. Oder so ähnlich 😀
1) Benutzer unter dem der Probe Service Läuft auf dem Veeam B&R Server angelegt und in Veeam B&R Zugriffsrechte gegeben.
2) In PRTG den Sicherheitskontext auf Probe Kontext gestellt
3) Die Veeam B&R Server Adresse im script direkt geändert
Ich weiß nicht warum Schritt 3) nötig ist. Jedenfalls habe ich bei manueller Ausführung unter Angabe des Parameters „BRHosts“ (-p=“-BRHost xxx.xxx.xxx.xxx“) keine Verbindung zusammenbekommen.
Perfekt. Dann viel Spaß mit dem neuen Sensor.
Danke
Würde aber gerne noch Punkt 3) Lösen 🙂
Ich kann natürlich für jeden Veeam Host ein eigenes Script anlegen, aber den Host per Parameter zu definieren wäre um einiges komfortabler.
Ist vielleicht meine Syntax falsch?
PSx64.exe -f=“scriptname“ -p=“-BRHost xxx.xxx.xxx.xxx“
und
PSx64.exe -f=“scriptname“ -p=“BRHost xxx.xxx.xxx.xxx“
funktionieren jedenfalls nicht
Mein Aufruf sieht so aus:
-f=“PRTG-VeeamBRStats.ps1″ -p=“Veeam01.lan.local“
Ah, so wirds gemacht. Das funktioniert auch bei mir.
Vielen Dank!
Markus,
I’m not able to run the script as it returns a p231 error code.
I’ve installed the addin in the veeam server, put the exe + ps1 script on the prtg server but it still doesn’t work.
Do you have a solution?
Hello Jestar,
Where du you see that error?
Have you tried to Execute the powershell Script manually on PRTG Probe?
Markus,
The error comes within PRTG when it refreshes the sensor, something about json..
The PRTG software is not on the veeam server, and when i run the script on the prtg server it says the veeamaddin is a invalid command….
You need the Veeam Console with The Poweshell SnapIn on the PRTG Probe
Could you tell me what the probe is? Is this the main PRTG server or the client’s server?
I’m new with PRTG and we would like to check the backup status within prtg instead of spitting through mail…
If have only the PRTG Core Server it is also the Probe.
I’ll test tomorrow, every server is being monitored by a prtg install on that specific server.
how does that work?
Thats how PRTG works. No Agent…
Jestar
Unlike something like „Nagios“, PRTG works without* agents on the server u want to monitor.
* as long as you don’t see SNMP as an agent 🙂 But PRTG has also a Windows and Linux agent (but recoment using SNMP)
You can also specify ssh or other remote connections to collect data from a server you want to monitor.
PRTG consists of a Core Server (collects data from the probe servers. hosts the webserver) and one or more probe servers.
The Core Server Installation already comes with a probe server. And you can add more remote probe servers. These remote probe server don’t need to be windows servers (Windows 7 Pro works fine for me.
Robert, If im correct i should install the veeamsnappin on our Core server?
veeamsnappin is already installed on the client side but i guess it’s not installed on the probe…
The PRTG was already setup before i started working here and it’s my job to get rid of the emails and have a log inside prtg for more overview…
Yes, install it on the core server.
Make sure it’s the exact same version as your Veeam installation is or it will not work.
You can use the report function of prtg to generate weekly reports of the sensor
I’ll have to check if we have the same veeam on every server.
we got 2k3/2k8/2k11/2k12 mixed and it will be quite a challenge….
Its about the Veeam B&R Server Version.
I installed the Veeam Console for a Veeam B&R Server v 9.0.0.1715
The script doesn’t work with a Veeam B&R Server v 9.0.0.1491
So even a minor difference is a problem.
if i put the snapin on the main server is the powershell script on every other prtg probe enough? So that i could use one .exe to read out multiple powershell scripts?
No, you need the SnapIn and Script on every Probe that uses the Advanced Sensor
Markus, thanks for the help so far!
Yet i’m stumbling upon another problem, when i try to install the powershell addin i get the following error:
The Windows PowerShell snap-in module C:Program FilesVeaamBackup and ReplicationBackupVeeam.Backup.PowerShell.dll does not have required Windows Powershell snap-in strong name Veeam.Backup.PowerShell, Version=8……
Thanks again for your help!
Hello Jestar,
What Version of Veeam are you using?
The Script is only tested with Version 9.
Does the setup fail completely and revert the changes?
What OS are you using?
Can you post the output of the “$PSVersionTable” PS variable?
You should also check https://forums.veeam.com. It’s a great community!
Kind Regards,
Markus
Markus,
Veeam version 9 is installed….
the OS is Windows 7 Pro
When i run command: get-pssnapin -registered , i see the veeam pssnapin…
$PSVersionTable:
PSVersion 4.0
WSManStackVersion 3.0
SerializationVersion 1.1.0.1
CLRVersion 4.0.30319.42000
BuildVersion 6.3.9600.16406
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion 2.2
And this is the full error in Veeam B&R toolkit:
Add-PSSnapin : Cannot load Windows PowerShell snap-in VeeamPSSnapIn because of the following error: The Windows PowerShell snap-in module C:Program
FilesVeeamBackup and ReplicationBackupVeeam.Backup.PowerShell.dll does not have the required Windows PowerShell snap-in strong name Veeam.Backup.
PowerShell, Version=8.0.0.0, Culture=neutral, PublicKeyToken=bfd684de2276783a.
At C:Program FilesVeeamBackup and ReplicationConsoleInitialize-VeeamToolkit.ps1:139 char:1
+ Add-PSSnapin VeeamPSSnapIn
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidData: (VeeamPSSnapIn:String) [Add-PSSnapin], PSSnapInException
+ FullyQualifiedErrorId : AddPSSnapInRead,Microsoft.PowerShell.Commands.AddPSSnapinCommand
Get-PSSnapIn : No Windows PowerShell snap-ins matching the pattern ‚VeeamPSSnapIn‘ were found. Check the pattern and then try the command again.
At C:Program FilesVeeamBackup and ReplicationConsoleInitialize-VeeamToolkit.ps1:141 char:11
+ $snapIn = Get-PSSnapIn „VeeamPSSnapIn“
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (VeeamPSSnapIn:String) [Get-PSSnapin], PSArgumentException
+ FullyQualifiedErrorId : NoPSSnapInsFound,Microsoft.PowerShell.Commands.GetPSSnapinCommand
Sorry, haven`t seen such an issue before.
But this Forum Thread looks similar:
https://forums.veeam.com/powershell-f26/veeampssnapin-not-found-t26632.html
Try this RegFile:
https://forums.veeam.com/powershell-f26/veeampssnapin-not-found-t26632.html#p148605
But please BackUp „[HKEY_LOCAL_MACHINESOFTWAREMicrosoftPowerShell1PowerShellSnapInsVeeamPSSnapIn]“ before.
Kind regards
Markus Kraus
I think the veeam installation is corrupt or something….
The reg file didn’t work and keeps giving me the same error when i open veeam powershel..
Hallo Markus,
ich habe leider wieder ein Problem aus dem ich nicht ganz schlau werde.
Zur Übersicht:
Standort 1: PRTG Core Server, Veeam Server 1
Standort 2: PRTG Remote Probe Server, Veeam Server 2 (ident zu Server 1)
—
Standort 1 bekommt Daten von Veeam Server 1
Standort 2 bekommt keine Daten von Veeam Server 2
kreuztest:
Standort 1 bekommt keine Daten von Veeam Server 2
Standort 2 bekommt keine Datenvon Veeam Server 1
Powershell und Veeam Konsole auf PRTG Remote Probe (Windows 7 Pro) installiert. Sonstige Einstellungen (Benutzer, Berechtigungen in Veeam Server etc…) getätigt.
Manueller Aufruf des Scripts über CMD mit dem Benutzer unter dem auch der PRTG Probe Server läuft liefert mir ein XML von Veeam zurück. Sowohl von Standort 1 als auch Standort 2.
Selbiges bei Standort 1. CMD liefert ebenfalls ein XML Dokument von Standort 2 zurück.
In PRTG selbst bekomme ich beim Core als auch Remote Probe Server folgenden Fehler:
XML: Das zurückgelieferte XML entspricht nicht dem erwarteten Schema. (Code: PE233) — JSON: Das zurückgelieferte JSON entspricht nicht der erwarteten Struktur (Invalid JSON.). (Code: PE231)
Die Log Daten von PRTG Core und PRTG Remote Probe sind unterschiedlich aber ähnlich (vermutlich wegen DE / EN Sprachpaket).
Core: „Parameter error, -f=filename “
Remote: „Das System kann die angegebene Datei nicht finden“
Der Parameter -f ist garantiert richtig. Auch die Datei PRTG-VeeamBRStats.ps1 existiert. Wenn ich eine andere Datei angebe, bekomme ich eine andere Fehlermeldung.
Habe es sowohl mit Host als Parameter (-p xxx.xxx.xxx.xxx) als auch ohne Parameter, dafür IP hardcoded im Script probiert, jedoch kein anderes Ergebnis bekommen.
Ne Idee?
Hallo Robert,
hört sich seltsam an.
Könntest du die beiden log Files irgendwie zur Verfügung stellen?
Hallo Markus,
ich habe die logs mal auf pastebin hochgeladen.
Für jeden Sensor habe ich zwei Logdateien, die ich pro paste zusammengefügt habe.
Wenn kein -p angegeben ist, war zu dem Zeitpunkt die IP hardcoded im Script
IPs + Zugänge zensiert. Passen aber alle
Erfolg: PRTG Core – Veeam Server 1: http://pastebin.com/RSdxaGh9
Fail: PRTG Core – Veeam Server 2: http://pastebin.com/wA7Ab6TH
Fail: Remote Probe – Veeam Server 2: http://pastebin.com/jcYSrGcf
Fail: Remote Probe – Veeam Server 1: http://pastebin.com/w8EFeiGV
Schon mal danke fürs ansehen.
Hallo,
Fail1:
Hier fehlt wohl der File Parameter
Data[‚exefile‘].asString := ‚PSx64.exe‘;
Data[‚exeparams‘].asString := “;
——————————–
Parameter error, -f=filename
Fail2-3:
Hier scheint das PowerShell Script zu fehlen.
Data[‚exefile‘].asString := ‚PSx64.exe‘;
Data[‚exeparams‘].asString := ‚-f=“PRTG-VeeamBRStats.ps1″‚;
——————————–
Das System kann die angegebene Datei nicht finden
Ich bin schon ein bisschen weiter gekommen, aber irgendwie auch nicht.
Parameter sind vorhanden und korrekt. Files (PSx64 + Script) sind auch alle vorhanden.
Wie gesagt, wenn ich den Script Namen in PRTG Falsch angebe, bekomme ich folgendes: File „C:Program Files (x86)PRTG Network Monitorcustom sensorsEXEXMLPRTG-VeeamBRStats.ps11“ not found.
(ps11 statt ps1 in PRTG angegeben)
Ich habe nun auf dem Core Server den funktionierenden Sensor an gleicher stelle geklont und siehe da, er liefert Daten. Blöder Weise hat der noch die Elemente vom Original (mit Backup Storage der natürlich nicht auf Standort 2 vorhanden ist). Aber nun ging es einen neuen Sensor zu erstellen.
Nun weiß ich zumindest dass es definitiv nicht am Veeam Sever 2 liegt.
Wenn ich nun dieses Sensor auf den Probe Server klone bekomm ich allerdings immer noch „invalid JSON“. Und dass er die Datei nicht findet (wie gesagt. normal andere Fehlermeldung wenn ich das script absichtlich falsch angebe).
Die PSx64.exe kanns ja auch ned sein. Die wähle ich ja per drop down aus und gebe sie nicht manuell an.
Aufm Core Server habe ich sie auch im EXE Ordner. Hab das am Remote probe auch ausprobiert, aber hat nix gebracht.
Die Sensor Daten sind allerdings anders bzw. umfangreicher am Anfang
http://pastebin.com/KK0F8JRL
Als nächstes hätte ich Powershell in Verdacht. Im Gegensatz zum PRTG Core, ist der Remote Probe ein Win7 bei dem ich PS erst nachinstalliert habe. Leider nach der Veeam Konsole installation. Am Anfang hab ich per Veeam Konsole auch kein PS Fenster öffnen können (button ausgegraut), aber das geht nun auch. Wollte noch auf Remote Signed umgestellt werden, was ich auch getan habe. PRTG Sensor geht aber trotzdem noch nicht.
Wenn mir der manuelle Aufruf eine XML Datenstruktur liefert, kann ich davon ausgehen, dass es nichts mit PS oder Veeam PS Tools zu tun hat?
(C:Program Files (x86)PRTG Network MonitorCustom SensorsEXEXML>PSx64.exe -f=“
PRTG-VeeamBRStats.ps1″ -p=“xxx.xxx.xxx.xxx“)
Ja korrekt, ich würde auch als erstes den manueller Aufruf auf dem Probe versuchen.
Wenn das klappt, muss es auch via PRTG funktionieren.
Finally got the veeam snapin to work after a repair installation of B&R..
Now my log says that the .ps1 file cannot be found…
Can i fix this with a remote probe installation of the veeam computer?
Hello Jestar,
sounds good, one step forward.
Is the Script placed on the Core and all Probes (Path: „C:Program Files (x86)PRTG Network MonitorCustom SensorsEXEXML“)?
Markus,
Don’t know what i’m doing wrong but i can’t get it to work.
Quote „Wenn mir der manuelle Aufruf eine XML Datenstruktur liefert, kann ich davon ausgehen, dass es nichts mit PS oder Veeam PS Tools zu tun hat?
(C:Program Files (x86)PRTG Network MonitorCustom SensorsEXEXML>PSx64.exe -f=“
PRTG-VeeamBRStats.ps1″ -p=“xxx.xxx.xxx.xxx“)“
Damit wollte ich auch sagen, dass ich den manuellen Aufruf schon getan habe.
CMD Output: http://pastebin.com/ZN1KNfPZ
PRTG Sensor Settings: http://imgur.com/a/09NWD
Log:
Result of Sensor 9842.txt: „Das System kann die angegebene Datei nicht finden“
Result of Sensor 9842.Data.txt: http://pastebin.com/5nENWqjS
Hallo Robert,
leider kann ich das Problem so nicht identifizieren.
Es könnte sich aber noch um ein Problem mit den Sonderzeichen handeln.
Würdest du zum Test bei dem fehlerhaften Sensor den optionalen PSx64.exe Parameter “ -raw“ in PRTG einfügen .
Hallo Markus,
habe wiedermal einen Neustart der Remote Probe gemacht und siehe da, es funktioniert. Windows…
Hi Markus,
vielen Dank für diese tolle Arbeit, funktionierte auf Anhieb!
Ich bin jetzt am Fine Tuning; was passiert, wenn ein wöchentlicher Job fehlschlägt – dann würde die Statistik nach 25h trotzdem wieder „OK“ anzeigen. Und wenn der Sensor 1 Woche rückwärts schaut, dann zeigt die Statistik einen Fehler, obwohl der Job inzwischen wieder ohne Fehler hätte durchlaufen können (z.B. durch einen manuellen Eingriff).
Vielleicht muss ich die Backup-Strategie überdenken und alle Jobs mind. 1x alle 24h laufen lassen – wie machst du das? Oder kannst du ein Forum empfehlen, wo diese Aspekte diskutiert werden?
Gruss,
Mike
Hi Mike,
es freut mich sehr wenn ich mit dem Script helfen konnte.
Das Script ist so ausgelegt, dass es Fehler innerhalb der letzten 24h meldet.
Hast du einen Job der nur einmal die Woche läuft, und dieser schlägt dann fehl wird er natürlich erfasst aber wie du auch erkannt hast nur 24h lang.
Ich persönlich versuche Wöchentliche Jobs zu vermeiden. Durch Techniken wie VMware CBT und Veeam Kompression / Veeam Bitlooker sind tägliche Deltas nur sehr klein.
Bester Ort um das Thema weitreichen zu diskutieren ist das Veeam Forum: https://forums.veeam.com/
Viele Grüße,
Markus
Hallo,
und vielen Dank für dieses großartige Tool/Script.
Seit der neusten Version (Update 2) für Veeam Backup und Replication gibt das System jedoch einen Fehler aus:
XML: Das zurückgelieferte XML entspricht nicht dem erwarteten Schema. (Code: PE233) — JSON: Das zurückgelieferte JSON entspricht nicht der erwarteten Struktur (Invalid JSON.). (Code: PE231)
Danke für die Unterstützung.
G. Wagner
Hi Gordon,
rufst du das Script mit dem Parameter -raw auf?
Aufgrund der Diskussionen hier hatte ich das auch gemacht. Dann erhielt ich den gleichen Fehler wie du. Daraufhin habe ich den Scrip-Aufruf ohne den Parameter -raw probiert und es hat funktioniert.
Gruss,
Mike
Hallo Gordon,
gerne doch.
Hast du nach dem Update auch die Konsole bzw. das PowerShell SnapIn auf dem PRTG Server aktualisiert? Die Versionen müssen leider exakt passen…
Ansonsten bitte einfach mal in das Sensor Log schauen, hier findet sich ziemlich sicher ein PowerShell Fehler.
Viele Grüße,
Markus
Es war die Konsole (Version) auf dem PRTG Server :-/
DANKE für diesen Tipp!
Gruß
Gordon
Noch zu einer anderen Sache…
Wenn ein Repositority (Speicherziel z.B. Cloud) aus der Infrastruktur im VEEAM entfernt wird, bleibt dieses weiterhin im Sensor des PRTG. ist dies ein Bug oder eine Konfiguration die nötig ist.
Gruß
Gordon
Perfekt, Cloud Connect Repositorys funktionieren aus. Hatte ich bisher nicht getestet…
Leider kann man einzelne channels eines Sensors in PRTG nicht entfernen.
Gerne auch bei Peassler mal anfragen dazu, eventuell kommt das dann irgendwann.
Hello Markus, tnx for the script. When I configure it in PRTG as stated in the screenshot I get the following message „Starting to Process Connection to „veeam backupserver here“ … Connecting BRHost…“. Script runs fine on probe (which have the Console installed). I’ve configured the option to write the results from the exe to disk. Any idea?
Hello Joris,
Thanks for using it.
Have you tried the Script using the context of the Configured PRTG Device User?
Greetings from Barcelona.
Hello Markus, i’ve tried both the security context of the Probe and the security settings off the parent device. Both give me the same result. I’ve added the sensor as a new EXE/SCRIPT.
Never used a sensor with XML output before, should I configure something else?
Have you tried to Start a cmd Shell on the Probe with configured credentials of the PRTG device and run the EXE with the configured Parameters?
The probe and the backupserver use the same domain admin account to run the test. To be sure I started manually a Powershell prompt (in x86 modus) as the domain admin and run the command. The results are in green beginning with:
0:Starting to Process Connection to veeam-backup.lan.local …
Connecting BRHost…
Successful-Backups etc…
With the -RAW parameter it gives me only a zero as result. I know have added the sensor to the probe itself (and not the backupserver device in PRTG where I added the service earlier) but its giving me the same result…
Hello Markus, found the error on my side (offcourse..) Added a normal exe/script sensor and not the advanced one. Once added and configured the parameters with a full path it now works succesfully. Can you tell me the difference between FaileD-Backups and FaileS-Backups. Seeing several instances with the Failes and Failed ones.
Hallo Markus,
tolles script!
um die Problematic bzw einsatz des PS64 Tools zu umgehen benutzer ich Remote Powershell commands.
so wird local die 32bit console verwendet und remote kann ausgeführt werden was auch immer benötigt wird.
Weiter muss auch nicht bei jedem Update von Veeam an die „extra“ console gedacht werden.
Logincredentials können / müssen via PRTG mitgegeben werden.
Script:
Invoke-Command -ComputerName FQDN -ScriptBlock { <#
script here
}
auf dem Backup Server muss Remoting aktiviert werden:
set-item wsman:localhostClientTrustedHosts -value FQDN
Grüsse
Sehr guter Ansatz Robert!
Würdest du deine Umsetzung teilen?
Ich könnte ein GutHub Projekt aufmachen.
Hi Markus,
gerne kannst du den Ansatz übernehmen!
Ein Git macht sinn Veeam bleibt ja aktuell nicht stehen und dein Script ist jetzt schon Gold wert!
Hallo Markus
Das Script überwacht keine Tape Jobs, ist das richtig?
Grüsse
Hallo Marcel,
Ich habe mir die Handhabung von Tape Jobs bisher noch nicht angesehen.
Ich werde mir aber dafür eine kleine Testumgebung aufbauen und dir noch mal Rückmeldung geben.
Hallo Markus,
hast du schon etwas zur Überwachung von TapeJobs bauen können?
Hallo Torsten,
Konnte mich dem Thema bisher leider noch nicht annehmen.
Interessiert dich da nur der Job status oder noch weitere Dinge?
Genau wie die anderen Abfragen: Succesful, Failed, Warning.
Habs jetzt mit
#region: Preparing Tape Session Reports
$seshListTJ = Get-VBRTapeJob
$successSessionsTJ = @($seshListTJ | ?{$_.LastResult -eq „Success“})
$warningSessionsTJ = @($seshListTJ | ?{$_.LastResult -eq „Warning“})
$runningSessionsTJ = @($seshListTJ | ?{$_.LastResult -eq „Running“})
$failedSessionsTJ = @($seshListTJ | ?{$_.LastResult -eq „Failed“})
#endregion
#region: XML Output for PRTG
Write-Host „“
$Count = $successSessionsTJ.Count
Write-Host „“
„Successful-TapeJobs“
„$Count“
„1“
„1“
„“
$Count = $warningSessionsTJ.Count
Write-Host „“
„Warning-TapeJobs“
„$Count“
„1“
„1“
„0“
„1“
„“
$Count = $failedSessionsTJ.Count
Write-Host „“
„Failed-TapeJobs“
„$Count“
„1“
„1“
„0“
„1“
„“
$Count = $runningSessionsTJ.Count
Write-Host „“
„Running-TapeJobs“
„$Count“
„1“
„1“
„“
gelöst.
Sieht doch super aus. Gerne kannst du auch einen Pull Request in dem GitHub Projekt aufmachen.
In der Paessler Knowledge Base wurde heute mein Artikel unter dem Namen „Monitoring Veeam Backup & Replication Without Veeam Enterprise Manager“ veröffentlicht.
https://kb.paessler.com/en/topic/72030-monitoring-veeam-backup-replication-without-veeam-enterprise-manager
Vielen Dank an das Paessler Team!
My test with Veeam Backup & Replication 9.5 was successful!
If you find any issues, please let me know.
Hi Markus! Congratulations for the great work! I’m testing your script with version 9.5, but so far I didn’t make it. I’m receiving a strange error…
„The ‚< ' operator is reserved for future use. At C:Program Files PRTG Network MonitorCustom SensorsEXEXMLPRTG-VeeamBRStats.ps1:115 char:14
+ <"
Any ideas? To avoid errors I have downloaded the script (no copy / paste). The PRTG is running in a Windows 7 PRO Machine (64 Bits). Vielen Dank!!
Hello Newton,
Thank you!
Do you use the latest Version from the GitHub Repo? There is nothing in Line 115 in the latest Version…
-> https://raw.githubusercontent.com/mycloudrevolution/Advanced-PRTG-Sensors/master/Veeam/PRTG-VeeamBRStats.ps1
Might you please use this Version and first execute it manually and if that works try it via PRTG and the PSx64.exe.
Best Regards,
Markus
Hi Markus,
I have redownloaded the file. Now I’m receiving another error:
„XML: Structural error in xml file, 1 open items. — JSON: The returned JSON does not match the expected structure (Invalid JSON.). (code: PE231)“.
I have the Veeam console installed and setup at my probe (my understanding is that my probe is my PRTG Server). Running the script at a cmd promt works fine. I have also tried to setup the sensor in both machines (the probe and in the veeam server). Any new ideas? Thanks!!
Hi,
Can you please post the Response via cmd?
Maybe there is an unsupported carracter in the output.
Hi Again Markus,
It seems that copy and paste does not work correctly. You can find a copy of a TXT at this link
https://1drv.ms/t/s!ApT6qLqXmRiyhO1JuMGGtPao56AEsQ
Sorry to mess your blog… 🙂
Hi Newton,
I have only approved the last comment, XML in WordPress Comments does not work very well.
OK, the output from the manual Script run looks very good. Also the XML Structure is fine.
I think there could be two possible issues:
1. PRTG has a Problem to read the XML properly (maybe your Repo Names are a problem, e.g. „REPO – Backup Repository – ITS-NAS2 (JOB de COPIA)“). You can try to remove the spaces and brackets.
2. Maybe there is a problem when the Probe Service executes the Script. You can check this in two ways:
2.1 Set „Write EXE Results to Disk“ on the Sensor and check the Sensor log for an detailed error.
2.2 Start a CMD as the configured User in Sensor and execute ‚ C:Program Files (x86)PRTG Network MonitorCustom SensorsEXEXML>PSx64.exe -f=“PRTG-VeeamBRStats.ps1″ -p=“10.21.2.37″‘
Best Regards,
Markus
Hi Markus,
der Sensor funktioniert tadellos, bis auf unser Cloud-Repository. Bei uns zeigt er immer ein Füllstandsanzeige von 100% an. Wenn ich das Powershell richtig deute, wird hier eine weitere
Funktion geladen.
————————————
#region: Functions
53 Function Get-vPCRepoInfo
————————————
und dass wiederum ist scheinbar nicht richtig.
Das Lokale Repository funktioniert problemlos.
Hast Du hier einen Ansatz?
Danke und Gruß
Carsten
Hi Carsten,
vielen Dank.
Leider muss ich gestehen, ich habe mit Cloud-Repositories nicht ausreichend getestet. Du meinst damit Cloud Connect Repositories, richtig?
Ich habe Tests hierzu auf meine ToDo liste gelegt, kann aber keinen Zeitpunkt dafür zusichern.
Gerne kannst du das Problem auch den GitHub Issues hinzufügen:
https://github.com/mycloudrevolution/Advanced-PRTG-Sensors/issues
Beste Grüße,
Markus Kraus
Mit folgender Ergänzung kann direkt in die x64 Powershell gesprungen werden und auf das PSx64 verzichtet werden:
if ($env:PROCESSOR_ARCHITEW6432 -eq „AMD64″) {
if ($myInvocation.Line) {
&“$env:WINDIRsysnativewindowspowershellv1.0powershell.exe“ -NonInteractive -NoProfile $myInvocation.Line
}else{
&“$env:WINDIRsysnativewindowspowershellv1.0powershell.exe“ -NonInteractive -NoProfile -file „$($myInvocation.InvocationName)“ $args
}
exit $lastexitcode
}
Hi,
Thank you so much i love this script. I had some issues i thought i would mention here if anyone else needs help.
I kept getting registry access denied errors as it seemed like PRTG was not running the script as admin, to solve this under services.msc for PRTG probe i changed it from running as SERVICE to the Account which is used by Veeam. The script now works perfectly, I also selected „Use security context of probe service“ under PRTG as the credentials are not required as probe service is running as the required user.
Thank you for sharing your experiences!
Hallo,
was sind failes-backups im Unterschied zu failed-backup?
Wolfgang Schraft
Hallo,
Quasi Versuche und endgültig fehlgeschlagene Backups.
Beste Grüße,
Markus
This works fine; .PRTG-VeeamBRStats.ps1 -BRHost localhost
Running .PSx64.exe -f=“PRTG-VeeamBRStats.ps1″ -p=“-BRHost localhost“ gives me the error:
0: Failed to connect to Veeam Backup & Replication server
Any thoughts?
I got it working by ditching psx64.exe and starting another .ps1 first, which then calls PRTG-VeeamBRStats.ps1
Contents of Run-x64.ps1:
$AllArgs = @(‚-NonInteractive‘,’C:Program` Files` `(x86`)PRTG` Network` MonitorCustom` SensorsEXEXMLPRTG-VeeamBRStats.ps1′,$Args)
& „$env:WINDIRsysnativewindowspowershellv1.0powershell.exe“ $AllArgs
Be mindful, this webpage may change quotations. In the path to PRTG-VeeamBRStats.ps1 before every space and parenthesis ( and ) there is a backtic ` to escape that character.
In PRTG I then set Run-x64.ps1 as the exexml with „-BRhost localhost“ as parameters.
XML: Structural error in xml file, 1 open items. — JSON: The returned JSON does not match the expected structure (Access violation at address 04E5F964. Execution of address 04E5F964). (code: PE231)
in der CMD:
C:temp>psx64.exe -f=VeeamBRStats.ps1 -p=backup
0:tempVeeamBRStats.ps1
Hallo,
ich bekomme die obigen Meldungen.
Was kann ich tun?
Wolfgang Schraft
Hallo Wolfgang,
Bitte einfach mal in logs des Sensors schauen. Oder das Ganze in einer cmd bzw. gerne auch das PS1 direkt in der PowerShell aufrufen. Beides bitte in dem Kontext des Users wie in dem PRTG Sensors.
So solltest du schnell sehen woran es hängt.
Gruß,
Markus
Hallo Markus,
erst einmal vielen Dank für dein tolles Script! Das erspart uns einiges an Zeit!
Ich habe noch ein wenig ergänzt bei uns, bei uns dauert längste JOB ca. 6 Stunden. Ich habe noch einen Kanal hinzugefügt, der überwacht ob ein JOB länger als 8 Stunden ( also 2 Stunden Puffer eingerechnet) im running State verweilt. hier mein Ansatz, falls es noch für Jemand anderen interessant ist:
#region: Preparing Backup Session Reports
….
$TooLongRunningSessionsBK = @($runningSessionsBk | ?{$_.CreationTime -ge (Get-Date).AddHours(8)})
…
Und noch die XML-Ausgabe:
$Count = $TooLongRunningSessionsBK.Count
Write-Host „“
„Too-Long-BackUps“
„$Count“
„1“
„1“
„“
Und zu guter Letzt im Debug:
„Too Long BackUps“ = $RunningTime.Count
Beste Grüße,
Alex
Hallo Alex,
Das freut mich zu hören.
Vielen Dank für deine Ergänzung!
Gerne kannst du auch GitHub einen pull request aufmachen.
Viele Grüße
Markus
Da habe ich keinen Account, daher dachte ich ich schreibe hier rein. 🙂
Mir ist noch ein kleiner Fehler unterlaufen im Debug muss die Zeile folgendermaßen lauten:
„Running Backups“ = $TooLongRunningSessionsBK.Count
Beste Grüße!
Hallo Markus
ich möchte gerne dein Veeam-Script für PRTG ausprobieren, hänge aber an einer Fehlermeldung fest.
Den Sensor konnte ich anlegen mit den entsprechenden Parametern.
Wir verwenden B&R 9.5 Update 2.
XML: Structural error in xml file, 1 open items. — JSON: Das zurückgelieferte JSON entspricht nicht der erwarteten Struktur (Access violation at address 0C02F964. Execution of address 0C02F964). (Code: PE231)
was mache ich falsch?
Beste Grüsse
Tom
Hallo Tom,
Am einfachsten schaust du dir mal die logs des Sensors an und führst das Skript zum test mal mit dem gleichen User wie in PRTG kommen konfiguriert manuell aus.
Die Meldung kann leider erst einmal alles bedeuten. Kommt einfach nicht das raus was PRTG erwartet.
Viele Grüße
Markus
Hallo Markus
Der oben gepostete Fehler lag an der Powershell Executionpolicy.
Jetzt bekomme ich einen anderen, hier der Auszug aus dem Log:
Data[‚lastmsg‘].asString := ‚#Y2 XML Parser mismatch: Wanted , got @#O231[Invalid JSON.]‘;
Hallo,
Das ist aber nicht das Log des Sensors oder?
Dieses ist im Filesystem zu finden.
Viele Grüße
Markus Kraus
Hallo,
das ist aus der Datei „Result of Sensor 3023.Data.txt“ aus C:ProgramDataPaesslerPRTG Network Monitor Logs (Sensors).
Hier komplett (anonymisiert):
Data[‚blockedsens‘].asString := “;
Data[‚canlinux‘].asString := ‚0‘;
Data[‚channelinfos‘].asString := ‚{}‘;
Data[‚channelnames‘].asString := “;
Data[‚environment‘].asString := “;
Data[‚exefile‘].asString := ‚PSx64.exe‘;
Data[‚exeparams‘].asString := ‚-f=“veeam-prtg.ps1″ -p=“brhost.domain.local“‚;
Data[‚fastcount‘].asString := ‚0‘;
Data[‚host‘].asString := ‚brhost.domain.local‘;
Data[‚hostv6‘].asString := “;
Data[‚inerror‘].asString := ‚1‘;
Data[‚ipversion‘].asString := ‚0‘;
Data[‚isexesensor‘].asString := ‚1‘;
Data[‚lastmsg‘].asString := ‚#Y2 XML Parser mismatch: Wanted , got @#O231[Invalid JSON.]‘;
Data[‚lastuptime‘].asString := ‚0‘;
Data[‚linuxlogindomain‘].asString := “;
Data[‚linuxloginpassword‘].asString := ‚***‘;
Data[‚monitorchange‘].asString := “;
Data[‚mutexname‘].asString := “;
Data[’notonpod‘].asString := ‚0‘;
Data[‚reboot‘].asString := ‚42905.3052242014‘;
Data[‚reqmsginterval‘].asString := ‚3600‘;
Data[‚resultfile‘].asString := ‚Result of Sensor 3023.txt‘;
Data[’sensorid‘].asString := ‚3023‘;
Data[’simulate‘].asString := ‚0‘;
Data[‚timeout‘].asString := ’60‘;
Data[‚tlsexplicit_default‘].asString := “;
Data[‚tlsexplicit_ftp‘].asString := “;
Data[‚tlsexplicit_imap‘].asString := “;
Data[‚tlsexplicit_pop3‘].asString := “;
Data[‚tlsexplicit_port‘].asString := “;
Data[‚tlsexplicit_smtp‘].asString := “;
Data[‚uptimecount‘].asString := ‚0‘;
Data[‚usednstime‘].asString := ‚0‘;
Data[‚usewindowsauthentication‘].asString := ‚1‘;
Data[‚windowslogindomain‘].asString := ‚domain‘;
Data[‚windowsloginpassword‘].asString := ‚***‘;
Data[‚windowsloginusername‘].asString := ‚user‘;
Data[‚writeresult‘].asString := ‚1‘;
Und bei der manuellen Ausführung?
Manuell schaut’s nicht schlecht aus. Der Sensor schiesst aktuell halt einen Fehlerzustand wegen obigem.
Successful-Backups
0
1
1
Warning-Backups
2
1
1
0
1
Failes-Backups
0
1
1
0
1
Failed-Backups
0
1
1
0
1
Running-Backups
0
1
1
Successful-BackupCopys
0
1
1
Warning-BackupCopys
0
1
1
0
1
Failes-BackupCopys
0
1
1
0
1
Failed-BackupCopys
0
1
1
0
1
Running-BackupCopys
0
1
1
Idle-BackupCopys
1
1
1
Successful-Replications
0
1
1
Warning-Replications
0
1
1
0
1
Failes-Replications
0
1
1
0
1
Failed-Replications
0
1
1
0
1
Running-Replications
0
1
1
TotalBackupRead
475
Custom
GB
1
1
TotalBackupTransfer
221
Custom
GB
1
1
REPO – NAS
76
Percent
1
1
20
10
1
REPO – BRHOST D:
78
Percent
1
1
20
10
1
Das problem ist vermutlich dein Repository Name „D:“.
Ein anderer Nutzer hat den PS64.EXE schalter -raw verwendet um das Problem zu lösen. Oder einfach das Repository anders benennen…
Aah, tiptop! Jetzt funktioniert der Sensor.
Danke für deine schnelle Hilfe!
Gerne!
Hallo Markus,
ich habe probiert irgendwie herauszufinden ob es möglich ist, die Dauer der einzeilnen Jobs zu monitoren, gibt es dazu irgendwas ? Ich habe es leider nicht gefunden. Wir haben diverse Jobs in denen die VMs liegen die ich gerne monitoren möchte wie lange diese laufen.
Danke für ein Feedback
Hallo Philip,
ja das ist grundsätzlich schon möglich. Shawn hat das z.B. auch für seinen HTML Report für Veeam mit einbezogen:
https://blog.smasterson.com/2016/11/02/veeam-v9-my-veeam-report-v9-0-3/
Ich bin mir jedoch nicht ganz sicher wie sinnvoll es ist, dass pauschal für ein Monitoring zu berücksichtigen.
Was ist dann eine Warnung oder ein Fehler?
Beste Grüße,
Markus
Hallo Markus,
danke für deine Rasche Antwort.
Unser Helpdesk hat für fast alle Services das PRTG als Monitoring im Einsatz. Wenn ich hier die einzelnen Jobs monitoren kann und auch einstellen kann wenn einer nicht durchgelaufen ist, oder immer noch läuft (da wird die dauer interessant) dann kann ein Fehler ausgelöst werden. Auch wäre interessant wieviel GB/TB pro Job verarbeitet wurden und wieviel VMs der Job beinhaltet.
Stimme dir zu, dass das grundlegend schon interessant ist. Bin mir aber unschlüssig ob das für die breite Masse sinnvoll ist.
Wenn du möchtest kannst du in dem GitHub Repositority ein Issue aufmachen. Kann aber nichts versprechen. Ist doch etwas aufwendiger das umzusetzen.
Vorweg vielen Dank für diesen und auch den CloudConnect Sensor. Diese Funktionieren perfekt und zeigen uns genau das auf was wir benötigen.
Ich hätte nun aber die Frage ob es möglich wäre diesen Sensor um die effektive Ausgabe der Jobs zu erweitern. D.h. im Sinne von Kanalname = Jobname und das Jobresult als Wert (egal ob mit Success, Warning, Failed oder Zahlenwerte)
Ich habe mich daran versucht.
asnp VeeamPSSnapin
$date = (Get-Date).AddDays(-1)
$session = Get-VBRBackupSession
foreach($backupsession in $session){
if($backupsession.EndTime -gt $date)
{
Write-Host „“
„$backupsession.Jobname“
„$backupsession.Result“
„0“
„0“
„“
}
}
Leider bekomme ich in PRTG als Output
Veeam.Backup.Core.CBackupSession.Jobname
Veeam.Backup.Core.CBackupSession.Result
0
0
Könnten Sie mir hier eventuell weiterhelfen?
Hallo,
Vielen Dank. Das freut mich zu hören.
Ich würde es nicht empfehlen, so dynamische Daten als channel zu haben, denn ein channel kann nicht gelöscht werden.
Dennoch ist dein Problem wohl einfach mit einer anderen Syntax zu lösen :
„$($backupsession.Jobname) “
Beste Grüße
Markus
Hallo,
super Idee und Anleitung .. leider hänge ich kurz vom Ziel.
Mein PRTG Sensor meldet Access denied.
Zugriffsrechte ist klar .. hab jetzt alles versucht aber komme nicht weiter.
PRTG läuft mit einem Domänenadminaccount, der selbe der auch auf dem veeam verwendet wird.
Sollte dass denn nicht die selben Voraussetzungen sein?
Ich habe leider bisher nur unter einer AdminPowerShellConsole das Script zum Laufen bekommen.
PRTG … -BRHost xxx.xx. etc.
Beim Sensor im PRTG habe ich
-f=“PRTG-VeeamBRStats.ps1″ -p=“-BRHost xx.xx.xx.xx.xx“
stehen und „Use Windows credentials“
Was mache ich falsch ?
Hallo Anakim.
Vielen Dank, das freut mich zu hören.
Die Windows UAC könnte dir hier ein Bein stellen.
Beste Grüße
Markus
Hallo, das Script ist super, vielen Dank dafür
noch eine Frage
Leider werden die Scale-Out Repositories nicht ausgelesen
ist es möglich die auch in das Script reinzunehmen
ich habe gesehen dass die mit
Get-VBRBackupRepository -ScaleOut
ausgelesen werden können, komme aber da nachher nicht weiter 😉
Vielen Dank
Grüsse
Nath
Hallo Nathaniel,
Vielen Dank. Das freut mich sehr zu hören.
Die Anforderung hatte auch schon ein anderer Nutzer. Finde das auch selbst gut.
Das Problem ist, dass nur die einzelnen „echten“ Repositories des Scale Out damit ausgewertet werden können und nicht das gesamte. Würde dir das auch helfen?
Es gibt dazu bereits einen Entwurf eines Nutzers, diesen könnte ich final umsetzen.
Beste Grüße
Markus
Hallo Markus
Nein leider nicht, es ist ja möglich dass einzelne Repositories des Scale-Out Repositories voll sind, was aber nicht weiter interessiert…
in diesem Fall kann ich das ja auch anders abfragen (normale Disk usage z.B.)
Aber vielen Dank für die Antwort
Grüsse
Nath
Ok, also Das gesamte ist relevant.
Ich setze mich da nochmal ran. Man kann das ja natürlich erreichen…
Danke für das Feedback.
Hello,
Several times the reporting of Scale-Out Repositorys was requested as enhancement for the Script.
I have created a GitHub Branch with a, updated Version:
https://github.com/mycloudrevolution/Advanced-PRTG-Sensors/blob/ScaleOut-Repo/Veeam/PRTG-VeeamBRStats.ps1
I would be glad if some users could test this version. Some with Scale-Out Repositorys and some without.
You can comment your results at this Pull Request:
https://github.com/mycloudrevolution/Advanced-PRTG-Sensors/pull/15
I know that also ‚berndleinfelder‘ created a pull request with this enhancement. But I was not able to merge the changes because of other conflicts.
Best regards,
Markus
Hallo Markus,
ich verwende derzeit das Skript von Shawn, leider ist das viel zu ausführlich für meine Anforderungen. Was ich auslesen möchte ist welche Backups mir zum Zeitpunkt, wenn ich das Skript ausführe zur Verfügung stehen. Das heißt ich meine möchte eine Übersicht welchen VM´s welche Datensicherungen zur Verfügung stehen. Sowohl der Daily Backups als Weekly & Co. Siehst du hierbei eine Möglichkeit? Wenn ja wäre ich sehr erfreut über eine rasche Antwort.
Mit freundlichen Grüßen
Fiede
Hallo Fiede,
Also Sensor für eine Überwachung macht deine Anforderungen denke ich nicht viel Sinn.
Du kannst dir mal diesen Artikel anschauen, eventuell macht die Funktion Get-VeeamProtection in deinem Fall Sinn:
https://mycloudrevolution.com/2017/09/07/veeam-vsphere-interactions-with-powershell/
Hallo Markus,
danke für die schnelle Antwort. Leider ist der Vorschlag nicht das was ich suche. Wäre es möglich die Auslesung mit Hilfe einer Auslesung des Veeam Backup Ordners? Wie Sie bestimmt merken habe ich nicht viel Erfahrung mit PowerShell und bin Ihnen deshalb sehr dankbar über Ihre Hilfe.
Mit besten Grüßen
Fiede
Hallo,
Ich würde einfach mal im Veeam Forum fragen. Dort hat sicher jemand einen solchen Report parat.
Beste Grüße
Markus
Hi Markus,
I’m trying to use the script from PRTG and I get the message:
XML: The returned XML does not match the expected schema. (code: PE233) — JSON: The returned JSON does not match the expected structure (Invalid JSON.). (code: PE231)
I’ve copied PSx64.exe and PRTG-VeeamBRStats.ps1 in EXEXML folder. If I run the script from command line it seems to work fine. I receive the info within and tags
Any suggestions will be welcome.
Thanks a lot,
Hi Xavi,
You can find a lot of suggestions in prior questions.
Best regards
Markus
Hi Markus,
I’ve read it all (German with the help of Translator) and checked and VeeamSnapin is installed and works from Power Shell CMD, I’ve also checked that the folder EXEXML is right to store the PSx64.exe and PRTG-VeeamBRStats.ps1 files.
I’ve also checked that Veeam Server and Console are the same version 9.5.0.823.
PRTG Core, Server and proves are installed in the same machine.
Executing the script from command line works fine:
c:Program Files (x86)PRTG Network MonitorCustom SensorsEXEXML>PSx64.exe -f=“PRTG-VeeamBRStats.ps1″ -p=“server.corp.local“
0:Starting to Process Connection to server.corp.local …
Connecting BRHost…
Successful-Backups
2
1
1
Warning-Backups
4
1
1
0
1
……
……
……
20
10
1
The settings in the Exe/Script Advanced seem to be the same as in the picture provided.
Seems to be related with the call to the script from PRTG.
Any suggestion?
Thanks a lot,
Can you share a Screenshot of the PowerShell output?
Often special caracters are a problem in XML…
Hi Markus,
Here you have the PowerShell output of the script
https://ibb.co/dGdArG
https://ibb.co/n7GKkb
https://ibb.co/dQuiBG
The scripts takes some minutes to finish and the PRTG provides the error just right away. I’ve also increased the timeout of the sensor to some minutes but with same result.
Thanks a lot,
Hi Markus,
These are the results of the script:
https://ibb.co/dGdArG
https://ibb.co/n7GKkb
https://ibb.co/dQuiBG
As I was saying, if you run the script from CMD it takes some minutes and provides the output of the images but from PRTG it fails right away. I have also tried to increase the timeout in PRTG to a higer value but not luck so far.
Thanks
Have checked the Sensor log?
Often it’s a permission Problem…
Hi Markus,
ich stoße leider beim manuellen Abruf auf den folgenden Fehler:
Connect-VBRServer : Failed to connect to Veeam Backup & Replication server:
Der angeforderte Name ist gültig, es wurden jedoch keine Daten des
angeforderten Typs gefunden
Hast du eine Idee?
Probe ist mit auf dem Core und auf dem Core ist auch die Console installiert.
Hallo Lukas,
bitte entschuldige die späte Nachricht. Du bist in den SPAM geraten…
Hast du in dem Skript den Parameter
$BRHost = "localhost",
an deine Umgebung angepasst oder gibst du diesen in PRTG mit?Beste Grüße,
Markus
Hallo Markus, einen Sehr interessanten und guten Sensor hast du da gebaut 🙂 Ich probiere Ihn gerade ein wenig für meine IT an zu passen das heißt quasi wir würden gerne jeden Backup Job einzeln sehen und nicht als einen großen, damit wir direkt wissen welcher Job Probleme hat. Leider bekomme ich dies einfach nicht hin (meine Power-Shell Kenntnisse sind nicht wirklich gut) kannst du mir da helfen?
Gruß
Patrick E
Hallo Patrick,
ich habe nun deine Nachricht auch im SPAM gefunden… Aber ich habe mich natürlich auch über den Kontakt über XING gefreut.
Wie bereits geschrieben, habe ich einen Fork deines Projekts gemacht und es zum laufen gebracht:
https://github.com/mycloudrevolution/Veeam_PRTG-sensor/blob/Dev/Veeam-Backup-Abfrage.ps1
Ich hoffe ich konnte damit weiterhelfen.
Beste Grüße,
Markus
Hallo Markus,
ich habe ein kleines Problem mit deinem Skript. Wenn das Skript ausgeführt wird, werden mir keine Werte zurückgegeben, obwohl bspw gerade ein Backup-Job läuft.
Hast Du eine Lösung für das Problem
Hallo Sebastian,
Die Frage ist doch sehr allgemein um darauf eine Lösung zu haben.
Wie rufst du denn das Script auf und wird eventuell ein Fehler ausgegeben?
Beste Grüße
Markus
Hallo Markus,
tut mir leid für die allgemeine frage.
Ich lasse das Skript einmal in PRTG ausführen, wie oben in der Anleitung beschrieben.
Wenn ich das Skript über die PowerShell Konsole aufrufe bekomme ich folgende Ausgaben:
Successful-Backups
0
1
1
Warning-Backups
0
1
1
0
1
Failes-Backups
0
1
1
0
1
Failed-Backups
0
1
1
0
1
Running-Backups
0
1
1
TotalBackupRead
0
Custom
GB
1
1
TotalBackupTransfer
0
Custom
GB
1
1
Successful-BackupCopys
0
1
1
Warning-BackupCopys
0
1
1
0
1
Failes-BackupCopys
0
1
1
0
1
Failed-BackupCopys
0
1
1
0
1
Running-BackupCopys
0
1
1
Idle-BackupCopys
0
1
1
Successful-Replications
0
1
1
Warning-Replications
0
1
1
0
1
Failes-Replications
0
1
1
0
1
Failed-Replications
0
1
1
0
1
Running-Replications
0
1
1
Successful-Endpoints
0
1
1
Warning-Endpoints
0
1
1
0
1
Failes-Endpoints
0
1
1
0
1
Running-Endpoints
0
1
1
REPO – Default Backup Repository
88
Percent
1
1
20
10
1
Leider wird kein Fehler ausgegeben.
Beste Grüße
Sebastian
Im Einsatz habe ich Veeam B&R Version 9.5 Update 3
Im PRTG habe ich -f=“skript.ps1″ hinterlegt, mit psx64.exe.
Die XML Files werden hier leider nicht korrekt dargestellt.
Sieht aber für mich grundsätzlich ok aus. Wo passen die Daten denn nicht?
Tut mir leide, das das File nicht richtig angezeigt wird.
Bspw bei Successfull Backup wird der Wert 0 angezeigt obwohl eigentlich der Wert 5 da stehen sollte. Oder bei TotalBackupTransfer und TotalBackupRead sollten bei laufendem Backup ja auch Daten gezeigt werden, was aber leider nicht der Fall ist.
Sind das normale VMware Backup?
Guten Morgen Markus,
ja es sind ganz normale VMWare Backups. Spielt es auch eine Rolle ob es ein eigenständiger oder ein Virtueller Server ist auf dem Veeam B&R läuft?
Nein, das spielt keine Rolle. Mich wundert sehr, dass die Abfrage der Repositories geht aber der Rest nicht…
Verwendest du die aktuelle Version aus dem GitHub Repositority?
Ich habe beide Versionen einmal ausprobiert. Leider zeigen mir beide diese Ergebnisse an.
Ich finde das auch wunderlich, wieso mir der Wert für das Repository ausgegeben wird. Leider verändert sich der Wert nur manchmal. Obwohl größere Daten auf das Repository gespeichert werden.
Sorry, da habe ich so auf Anhieb leider keine Lösung. Da bleibt nur Debug mit den einzelnen Schritten aus dem Script.
Hi Markus,
Thanks for the excellent script. I am installing for the first time on the latest build of PRTG (as of today) and Veeam 9.5.0.1536 (the latest console as of today).
In PRTG I have specified the PSx64.exe, as per your instructions. The parameters are simply
-f=“PRTG-VeeamBRStats.ps1″
However, PRTG reports an error…
Response not well-formed: „(Starting to Process Connection to backup1.domain.local … Connecting BRHost… Successful-Backups 5 1 etc, etc.
The response looks good to me. When I run powershell on the PRTG server (either as an admin with rights on the Veeam server, or as the inherited PRTG admin user account) I get the same output as above.
Also, the log (sensor) file shows the correct-looking output (pasted below)
Starting to Process Connection to backup1.domain.local …
Connecting BRHost…
Successful-Backups
5
1
1
etc, etc
Any idea what the problem could be??
Thanks in advance.
Hello,
Thanks for your feedback.
Do you have any special caracters in your repositority names (like “ )?
I have parenthesis (brackets) in the some repository names. Would that break the formatting?
No other special characters.
Most likely. Please referer to the previous comments and github issues for the solution.
So I simply renamed my repositories as a quick fix, but the problem still remained.
I then read the comments above regarding special charaters and realised I had setup the sensor with a basic EXE, not advanced EXE,
I recreated the sensor using the correct type and it’s working now! Many thanks.
Hallo, ich habe ein kleines Problem mit dem Sensor:
Ich denke, dass die Verbindung zu Veeam klappt, jedoch erhalte ich als Antwort der Sensors:
Successful-Backups 3 1 1
Hallo Bastian,
XMLs sind hier schlecht darstellbar.
Kannst du einen Screenshot verlinken und das Problem etwas näher beschreiben?
Natürlich.
Der Sensor gibt folgende Meldung:
https://ibb.co/kjY8ad
Puh, diese Situation habe ich auch noch nicht gesehen.
Die Ausgabe in PowerShell und über die PSx64. Exe sehen sonst gut aus?
Hallo,
ich habe den Sensor erfolgreich installiert, sehe jedoch nicht alle Werte.
z.B. die Failed oder Success-Backups sehen irgendwie leer aus:
https://www.photobox.co.uk/my/photo?album_id=5329618837&photo_id=500785389499
Mache ich etwas falsch?
Hallo,
Der link funktioniert leider nicht.
OH, sorry!
Wie siehts mit diesem aus?
https://www.photobox.co.uk/my/photo/full?photo_id=500785389499
Hat leider wieder nicht geklappt.
Jetzt aber…
https://picload.org/view/dolrodcw/upld.png.html
Sehr schön. Jetzt hat es geklappt.
Wo denkst du fehlen hier daten? Für mich sieht das erst mal ok aus.
Habe noch mal über deine Frage nachgedacht. Vielleicht ist die Darstellung etwas verwirrend. Du hast in dem Screenshot 3 erfolgreiche und 0 fehlgeschlagene Sicherungen. Die Tabelle ist da etwas klarer denke ich.
Hilft dir das weiter?
Hallo,
okay, aber wir haben eigentlich mehr, als 3 „erfolgreiche“ Backups.
Kann es sein, dass es ein Übertragungsfehler o.ä. gibt?
Das standard Verhalten erfasst nur die letzten 24h. Könnte es etwas damit zu tun haben?
Wenn die Erfassung läuft, kann es eigentlich kein Problem in der „Übertragung“ geben.
Gibt es eine Chance, das Skript mit Veeam Version zum Laufen zu kriegen? So wie ich das, mit unzureichender Kenntnis erkennen kann, gibt es in dem PS SnapIn von Version leider das Cmdlet Get-ServerSession nicht…
Welche Version meinst du genau?
Theoretisch geht das mit jeder halbwegs aktuelle Veeam Backup & Replication version, wenn das passende PS SnapIn installiert ist.
Es geht um Version 8.0.0.2084.
Das PS SnapIn ist installiert, aber wenn ich mit „Get-VBRCommand“ mir die Cmdlets anzeigen lasse, fehlt das „Get-VBRServerSession“ Cmdlet und genau da wird mir auch ein Fehler ausgeworfen.
Ist es möglich da eine Alternative einzubauen?
Tut mir leid, ich selbst werde keine Kompatibilität zu Version 8.x herstellen.
Es steht aber natürlich frei das Skript selbst anzupassen.
Was ist denn der Grund für den Einsatz dieser alten veeam Version?
Der Kunde möchte nicht aktualisieren 😉
Mir fehlt nur das passende Äquivalent zu dem verwendeten Cmdlet…
Naja, das ist ja kein echter Grund, sondern ehr eine Haltung. Aber ist dem Kunden natürlich freigestellt.
Version 8.0 ist übrigens mit dem nächsten major release endgültig End of Support:
https://www.veeam.com/kb1530
Hallo Markus,
das Script funktioniert perfekt.
Hast du noch eine Idee um deaktivierte Jobs darüber zu kontrollieren bzw. zu alerten?
Hallo Thomas,
Das freut mich zu hören.
Deaktivierte jobs aller Art zu erfassen ist eine sehr gute Idee!
Kann dir aber leider nicht sagen, wann ich dazu komme die Anpassungen vorzunehmen.
This Is a really good script, thank you, do you have a solution for the false positives when a job fails but the retry was successful, it will still show as a failed job and show a down status of 1 failed job.
Thanks, Ash.
The script differentiates between Fails and Failed.
Fails will be retried:
$failsSessionsBk = @($seshListBk | Where-Object{$_.Result -eq "Failed"})
Failed is the final result:
$failedSessionsBk = @($seshListBk | Where-Object{($_.Result -eq "Failed") -and ($_.WillBeRetried -ne "True")})
Does that help you?
Hi ,
Can anyone help me please.
I recently had to apply a threshold to „Successful Backup“ Channel due to the fact if the backup doesn’t run then nothing is detected because there is no failed alert etc.
However we know have to apply a schedule to backups that only run Monday-Friday. The Schedule runs Tuesday to Saturday. This has caused an issue whereby if the backup fails on Friday evening , we come in Monday morning and have no idea its failed,.
Has anyone any idea how i could resolve the issue.
Thanks
Hi,
Adding a threshold to failed backups is not an option?
Hi Markus ,
Thanks for your response.
I already have a threshold set to that..
I had to set a threshold to successful backups due to the fact if it doesn’t run then it doesn’t give a failure or a success, meaning we do not about backup problems. This has happened.
Problem with this the backup runs Monday Night to Friday Night , meaning if it fails Friday night we will not know about it until Tuesday morning. This is due to a schedule on the sensor. Without the schedule we simply have a false positive on the Monday.
I could probably amend the script or another element i just need to get in my head how to tackle it.
Thanks
Hi Danny,
I think this special requirement can only be met by modifying the Script to exclude the weekend.
Best regards
Markus
Hi Markus,
Right ok, i will do a bit of googling then.
I was thinking of increasing the time on the succesful backup function to cover the weekend.
Thanks
Hallo zusammen,
leider liefert der Sensor bei uns keine Werte.
Wenn wir die PSx64.exe mit den entsprechenden Parametern aus der Powershell (Admin) starten, bekommen wir keinerlei Output, egal wie lange wir warten (12 Stunden).
Starten wir das Script direkt, mit dem Veeam-Server als Parameter, bekommen wir die korrekten Werte!
.PRTG-VeeamBRStats.ps1
Auf einem anderen PRTG Server bekommen wir mit den selben Dateien und dem selben Befehl die korrekten Daten!
.PSx64.exe -f=“PRTG-VeeamBRStats.ps1″ -p=““
Offenbar liegt das Problem an der PS64.exe im Zusammenhang mit unserem Server (Win 2012 R2)
Unglücklicherweise werden keine Logs geschrieben, auch in der Powershell taucht nichts weiter auf.
Hat jemand vielleicht eine Idee wie wir das weiter Debuggen können?
Beispielsweise indem man in den Powershellprozess bzw. in die laufende PSx64.exe hineinschaut.
LG Dario
Hallo Dario,
Um welche Veeam und PowerShell Version handelt es sich?
Verwendest du die letzte Version aus dem GitHub Repositority?
Habe ich das richtig verstanden:
– das Script direkt geht lokal auf dem Veeam server
– remote per PSx64 geht es nicht?
Hast du es auf dem Veeam Server mit PSx64 versucht?
Beste Grüße
Markus Kraus
Nachtrag:
Das Script scheint an folgenden Befehl zu hängen.
Veeam.Backup.Core.CBackupRepositoryEx]::SyncSpaceInfoToDb($r, $true) Zeile 155
Ich bin das Script im Debugmodus der Powershell ISE Schritt für Schritt durchgegangen.
Die Zeile 155 war die letzte gelb markierte, bevor es nicht mehr weiterging.
Das ist dann auf einem remote Server mit dem PS SnapIn?
Ich glaube ich bin echt zu dämlich für Power Shell…
Mein PRTG meldet dauerhaft „Failed to load VeeamPSSnapIn“
Die Console ist auf dem PRTG installiert. Wenn ich dort aus der GUI die Powershell öffne ist das Snapin bereits geladen.
Wen ich das per Hand in einer Powershell mache… per „Add-PSSnapin VeeamPSSnapIn“ und bestätige ich bekomme ich keine Fehlermeldung. ein „get-pssnapin“ zeigt mir auch VeeamPSSnapIn an. Ein „Get-VBRCommand“ bringt mir aber die Meldung das er nix findet.
Hallo Dennis,
Ich habe dazu ein paar Fragen:
– Ist der PRTG Server auch der genutzte Probe?
– Nutzt die PSx64 exe wie in dem Artikel beschrieben?
Beste Grüße
Markus Kraus
Habe nur eine Probe… der PRTG Server selbst. Also ja.
Ja die PSx64.exe nutze ich.
Aber wie gesagt… kriege per Hand in einer PS ja schon die Meldung das er keine Veeam Kommandos bekommt… warum auch immer..
Da wäre vielleicht dann ein Frage im Veeam forum oder ein Support Call ganz hilfreich.
i finally got it working by this:
Create a .cmd-file in the exexml custom sensor folder of prtg
Write this into the file: @“%SystemRoot%SysnativeWindowsPowerShellv1.0powershell.exe“ -File .ps1
psx64.exe not working
without this i always ended up in snap ins not registered. Probably still in 32 mode for some reason
First off, thank you so much for this! It’s a great sensor that gives me peace of mind that things are working as they should. That being said, unfortunately I have a problem…
We’ve just updated to 9.5.4.2753 and PRTG said:
„Failed to connect to Veeam BR Host“
I got the latest version of PRTG-VeeamBRStats.ps1 from GitHub but now it says:
„XML: The returned XML does not match the expected schema. (code: PE233) — JSON: The returned JSON does not match the expected structure (Invalid JSON.). (code: PE231)“
I’ve set the sensor to output to disk but the log is empty so no clues there. Any obvious ideas as to what the problem is? It would be greatly appreciated.
Thanks Dom.
Have you already upgraded the console on the PRTG Probe after the Veeam update? The PS SnapIn only works with identical versions…
I did not update the Veeam console, I had forgotten about that part!
The sensor is working again. Thank you very much for your prompt reply and assistance 🙂
Herzlichen Dank für das super Script und die Anleitung.
Bei mir hat es erstmal auch nicht funktioniert (Failed to connect to Veeam BR Host)
Nach ein paar Tests habe ich dann den Hostnamen direkt ins Script geschrieben und das PSx64 ohne den Parameter -p verwendet, danach lief alles wie es sollte.
Hi,
Thank you for your script, it’s working very well for 7 probe (7 computer with the same Veeam installed).
But I have 1 probe which is not working.
It return the error if I launch it manually :
1
Failed to connect to Veeam BR Host
The only differences I can see is that the remote computer with Veeam is a Windows 10 1903 which the others is Windows 7 or Windows 10 1809.
The Veeam version is identical in the PRTG probe and Veeam computer, 9.5.4.2754
Could you give me a solution hint ?
Thank you very much
Regards
Hi,
Have you tried to connect yourself from this box via PowerShell prompt to the vbr server?
Hi Markus,
It’s works. but I had to use the -User and -Password attributes to connect. It’s working when I launched it manually or type it in the ps file. If I use the Windows attributes in the PRTG parent, it’s not working. Access denied.
I tried to use the -p parameter in the parameters of the sensors, but it’s not working also.
Is it correct –> -f=“PRTG-VeeamBRStats-BPPORVeeam01.ps1″ -p=“-User ptuser -Password mypassword“ ?
I tried to quote the user and password with no luck…
The only way is to set the user and password in the ps file, not so secure… I will try with credential parameter, but I’m not a master of Powershell 😉
Passing arguments with PSx64 is quite tricky. Please check the prior comments for the solution.
Moin Moin Markus,
ich bin gerade dabei Dein Sensor zu testen, bekomme jedoch folgende Meldung :
XML: XML Parser mismatch: Wanted , got — JSON: Das zurückgelieferte JSON entspricht nicht der erwarteten Struktur (No mapping for the Unicode character exists in the target multi-byte code page). (Code: PE231)
Es ist ein Veeam 9.5.0.1536 das Script wird über psx64.exe aufgerufen.
Moin Alex,
Hast die das Skript schon manuell auf deinem Probe mit dem gleichen user gestartet?
Am besten einmal in der PowerShell und einmal cmd mit PSx64.
Alternativ kannst du in die Logs des Sensors schauen auf dem Probe, da solltest du das Problem sehen.
Moin Markus,
erst einmal Danke für Deine schnelle Antwort !
Ich habe das einmal mit psx64 und mit der „Normalen“ PS ausgeführt. Beides kommt zum selben Ergebnis. Als User habe ich den Dom Admin genommen. Hier nun die Ausgabe:
In C:Windowssystem32veeam-status.ps1:312 Zeichen:159
+ … TF-8″ method=“post“>
Die Fehlermeldung ist leider nicht gut angekommen.
Du kannst gerne auch das Kontaktformular benutzen.
Mache ich !
Hast Du in einer Minute, Danke Dir
Hallo Markus,
ich habe hier folgendes Problem, wenn ich das Script manuell ausführe bekomme ich folgenden Fehler:
https://pastebin.com/yAcvDDqT
Also eigentlich mehrere Fehler, denke das ist das selbe Problem welches Alex auch hat.
Weißt du hierauf eine Antwort?
Gruß
Susie
Hi Markus,
vergiss bitte meinen letzten Post ich habe den Fehler selbst gefunden, der hat beim copieren einen Fehler gemacht, deswegen hatte ich den HTML text im File und kein PS Script 🙂
Trotzdem Danke
Freut mich, dass das Problem gelöst ist.
Viel Spaß mit dem Sensor.
Hallo Markus,
Vielen Dank für Dein tolles Skript. Ich habe es auch schon bei zwei Kunden zum laufen bekommen. Jeedoch habe ich nun ein Problem. Es tritt sowohl in der Powershell auf der Veeam-VM welche auch gleichzeitig die PRTG Probe ist, als auch in PRTG (Logs) selbst.
Hier der Log:
C:Program Files (x86)PRTG Network Monitorcustom sensorsEXEXMLPRTG-VeeamBRStats.ps1 : Es ist nicht m”glich, eine
Methode fr einen Ausdruck aufzurufen, der den NULL hat.
In Zeile:1 Zeichen:1
+ &’C:Program Files (x86)PRTG Network Monitorcustom sensorsEXEXMLP …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,PRTG-VeeamBRStats.ps1
C:Program Files (x86)PRTG Network Monitorcustom sensorsEXEXMLPRTG-VeeamBRStats.ps1 : bei
Get-vPCRepoInfo, C:Program Files (x86)PRTG Network Monitorcustom sensorsEXEXMLPRTG-VeeamBRStats.ps1:
Zeile 168
bei , C:Program Files (x86)PRTG Network Monitorcustom sensorsEXEXMLPRTG-VeeamBRStats.ps1: Zeile 509
bei , : Zeile 1
In Zeile:1 Zeichen:1
+ &’C:Program Files (x86)PRTG Network Monitorcustom sensorsEXEXMLP …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,PRTG-VeeamBRStats.ps1
Successful-Backups
1
1
1
Warning-Backups
0
1
1
0
1
Failes-Backups
0
1
1
0
1
Failed-Backups
0
1
1
0
1
Running-Backups
0
1
1
TotalBackupRead
109
Custom
GB
1
1
TotalBackupTransfer
18
Custom
GB
1
1
Successful-BackupCopys
0
1
1
Warning-BackupCopys
0
1
1
0
1
Failes-BackupCopys
0
1
1
0
1
Failed-BackupCopys
0
1
1
0
1
Running-BackupCopys
1
1
1
Idle-BackupCopys
0
1
1
Successful-Replications
0
1
1
Warning-Replications
0
1
1
0
1
Failes-Replications
0
1
1
0
1
Failed-Replications
0
1
1
0
1
Running-Replications
0
1
1
Successful-Endpoints
0
1
1
Warning-Endpoints
0
1
1
0
1
Failes-Endpoints
0
1
1
0
1
Running-Endpoints
0
1
1
1
Es ist nicht m”glich, eine Methode fr einen Ausdruck aufzurufen, der den NULL hat.
Kannst Du mir weiterhelfen?
Hallo Christian.
Das freut mich sehr, wenn ich dir mit dem Skript weiterhelfen kann.
Hat der der Kunde eventuell spezielle Repositories, wie z. B. Ein cloud repository?
Beste Grüße
Markus Kraus
Hallo Markus,
Sowohl als auch. Wir sichern einmal lokal per CIF auf ein NAS und zusätzlich auf ein Cloud Repository.
Gruß Christian
Cloud Repositories scheinen beliebter zu werden, ein anderer Nutzer hatte wohl vor kurzem das gleiche Problem.
Versuche mal diese Variante:
https://github.com/mycloudrevolution/Advanced-PRTG-Sensors/blob/ExcludeCloudRepos/Veeam/PRTG-VeeamBRStats.ps1
Ja, das stimmt wohl. Vielen Dank nochmal für das Script, dass die Cloud Repositories ausnimmt. Funktioniert Super!
Hallo Markus
leider erhalte ich immer folgende Fehlermeldung im PRTG Log:
Connect-VBRServer : Der Zugriff auf den Registrierungsschlssel „HKEY_LOCAL_MACHINESOFTWAREVeeamVeeam Backup and
Replication“ wurde verweigert.
In C:Program Files (x86)PRTG Network Monitorcustom sensorsEXEXMLPRTG-VeeamBRStats.ps1:101 Zeichen:2
+ Connect-VBRServer -Server $BRHost
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Connect-VBRServer], UnauthorizedAccessException
+ FullyQualifiedErrorId : System.UnauthorizedAccessException,Veeam.Backup.PowerShell.Cmdlets.ConnectVBRServer
C:Program Files (x86)PRTG Network Monitorcustom sensorsEXEXMLPRTG-VeeamBRStats.ps1 :
Error: BRHost Connection Failed
In Zeile:1 Zeichen:1
+ &’C:Program Files (x86)PRTG Network Monitorcustom sensorsEXEXMLP …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,PRTG-VeeamBRStats.ps1
0:Starting to Process Connection to „*******.*****.local“ … Connecting BRHost…
Via CMD und PS funktioniert es, so wie es aussieht wird es wohl ein Berechtigungsproblem sein?
Im PRTG Sensor habe ich die Zugangsdaten des übergeordneten Gerätes ausgewählt.
Hallo Manfred,
Konkret diese Meldung ist mir neu. Ich stimme dir aber zu, dass es nach einem Berechtigungsproblem aussieht.
Hast du mal einen anderen User für den Sensor versucht?
Hallo Markus,
ich versuche dein tolles Skript zum Laufen zu kriegen, da es uns eine Menge Arbeit abnehmen würde. Nach der Einrichtung des Sensors, bekomme ich jedoch die Fehlermeldung
„XML: Structural error in xml file, 3 open items. — JSON: Das zurückgelieferte JSON entspricht nicht der erwarteten Struktur (Invalid JSON.). (Code: PE231)“
Erst anschließend habe ich gesehen, dass ich die Veeam Console auf dem PRTG Server installieren musste. Macht es einen Unterschied, das ich in der normalen PowerShell erst „Add-PSSnapin VeeamSnapIn“ durchführen muss um das Skript manuell auszuführen? Öffne ich PowerShell über Veeam hat er das natürlich automatisch geladen.
PSx64.exe -f=“PRTG-VeeamBRStats.ps1″ -p=“Server1.Domäne.net“
Führe ich das Skript auf dem PRTG Server von Hand aus, bekomme ich auch die gewünschten Ergebnisse. Gebe ich allerdings die gleichen Parameter im PRTG ein, kommt der oben beschriebene Fehler. Im Result Log File steht dann allerdings:
C:\Program Files (x86)\PRTG Network Monitor\custom
sensors\EXEXML\PRTG-VeeamBRStats.ps1 : Failed to connect to Veeam BR Host
In Zeile:1 Zeichen:1
+ &’C:\Program Files (x86)\PRTG Network Monitor\custom sensors\EXEXML\P …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorExcep
tion
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorExceptio
n,PRTG-VeeamBRStats.ps1
C:\Program Files (x86)\PRTG Network Monitor\custom
sensors\EXEXML\PRTG-VeeamBRStats.ps1 : bei , C:\Program Files
(x86)\PRTG Network Monitor\custom sensors\EXEXML\PRTG-VeeamBRStats.ps1: Zeile
190
bei , : Zeile 1
In Zeile:1 Zeichen:1
+ &’C:\Program Files (x86)\PRTG Network Monitor\custom sensors\EXEXML\P …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorExcep
tion
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorExceptio
n,PRTG-VeeamBRStats.ps1
1
Failed to connect to Veeam BR Host
Ich habe es auch schon probiert die IP Adresse als Parameter anzugeben. Wieder funktioniert es wenn ich es direkt in die PowerShell eingebe. Über PRTG kommt aber genau die gleiche Fehlermeldung mit dem gleichen Log Inhalt.
Hallo Marcus,
Vielen Dank für die Nutzung meines Skripts und die gute Fehlerbeschreibung.
Ich vermute, dass problem könnte an zwei Dingen liegen:
– Hat der PRTG User, der für den Host genutzt wird genügend Rechte im Veeam?
– Könntest du msl den Server fest im Skript hinterlegen und dem Parameter weg lasden? Oft gibt es da Syntax Probleme mit dem Parameter und der PSx64 exe. Default ist glaube ich aktuell „localhost“
Beste Grüße
Markus
Hallo, leider hat es nichts gebracht den Server fest im Skript zu hinterlegen. Ich habe es wieder versucht den Namen wie auch einmal die IP Adresse in das Skript einzutragen. Es hat sich leider nichts geändert. Die gleichen Meldungen im Log.
Ich probiere noch etwas herum, wobei ich keine wirkliche Idee habe warum er „failed to connect“ als Fehler angibt.
Hast du die PowerShell Session mal als der PRTG User gestartet?
Hallo zusammen,
bekomme den selben Fehler wie Marcus. Manuell ausgeführt liefert das Script die richtigen Ergebnisse.
Im Sensor Log steht:
Failed to connect to Veeam BR Host
In Zeile:1 Zeichen:1
+ &’C:Program Files (x86)PRTG Network Monitorcustom sensorsEXEXMLP …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorExcep
tion
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorExceptio
n,PRTG-VeeamBRStats.ps1
Vielleicht habt ihr ja schon eine Lösung gefunden.
VG
Daniel
Hallo,
Das häufigsten Probleme sind, fehlende Berechtigungen des PRTG users für den Sensor oder falsche Übergabe des Servers im Parameter.
Habe den Fehler gefunden. Steht eigentlich weiter oben schon.
Der Aufruf muss -f=“PRTG-VeeamBRStats.ps1″ -p=“xxxxxx.xxx.xx“ heißen und nicht wie im Parameter angegeben: -f=“PRTG-VeeamBRStats.ps1″ -p=“„-BRHost xxxxx.xxx.xx“.
Das BRHost weglassen.
Dann hatte ich noch im Veeam eine kleiner als Klammer „>“ in der „Backup Repositories“ Beschreibung. 🙂
Nun läuft das Script wie erwartet. Danke dafür.
VG
Daniel
Hallo kurzes Update, ich habe die Fehlerursachen gefunden. Mehrzahl. Auf dem ersten Server war zwar die aktuellste Veeam Version drauf, allerdings noch die PowerShell Version 2 installiert. Auf dem zweiten Test-Server war zwar PowerShell aktuell, aber die Veeam Version veraltet. Und auf einem dritten Server den ich getestet habe, hatte ich im PRTG die TimeOut Zeit auf 180 Sekunden hochstellen müssen. Inzwischen funktionieren 9 von 12 Veeam Abfragen. Keine Ahnung was bei denen noch nicht passt, aber ich gehe nicht davon aus dass es noch ein Problem mit dem Skript gibt.
Danke für die Info.
Hallo Markus, erstmals vielen Dank für das tolle Script. Funktionier soweit perfekt. Eine Frage. Ich nutze auch Veeam für Office365 Backup. Die Veeam Instanz läuft auf einem anderen Port (Veeam mit deinem Script Port 9392 und Office365 Port 9191) hast du einen Tip wie man auch das integrieren könnte oder auch mit einem 2ten Sensor? Nur mit der Angabe des Ports z.B. localhost:9191 funktioniert es nicht.
Hallo Markus,
verstehe ich das richtig, dass du auch Veeam Backup für O365 monitoren möchtest?
Hallo Markus,
erstmal Respekt für deine Überragende Arbeit hier!
ich stehe hier einen Schritt vor dem Durchbruch.
mein Problem schein ein Berechtigungsproblem zu sein.
ich kann auf der Probe in der Veeam Console das Script starten jedoch nicht über die Powershell.
Eingeloggt bin ich mit meinem AD Nutzer der auch im Veeam als Backup Administrator hinterlegt ist.
Ich bin auch auf allen Servern Lokaler Administrator, zusätzlich habe ich schon Lokale User getestet dies hat leider auch nicht geholfen.
Hallo Alexander,
Vielen dank für dein Feedback.
Das bedeutet, per PRTG klappt die Ausführung schon mal?
Was ist denn die Fehlermeldung wenn du das Skript in einer PowerShell Session außerhalb der Veeam Console ausführst?
Grundlegend ist das dort auch eine „Normale“ PowerShell Session, in der einfach das Veeam SnapIn direkt geladen wird.
Ja das Script wird ausgeführt und bekommt überall die Selbe Fehlermeldung:
PS C:\Program Files (x86)\PRTG Network Monitor\Custom Sensors\EXEXML> .\PSx64.exe -f=“PRTG-VeeamBRStats.ps1″
C:\Program Files (x86)\PRTG Network Monitor\Custom Sensors\EXEXML\PRTG-VeeamBRStats.ps1 : Failed to connect to Veeam
BR Host
In Zeile:1 Zeichen:1
+ &’C:\Program Files (x86)\PRTG Network Monitor\Custom Sensors\EXEXML\P …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,PRTG-VeeamBRStats.ps1
1
Failed to connect to Veeam BR Host
Hallo Alexander,
übergibst du keinen Servernamen an das Skript?
Würdest du mal mit dieser Version des Skriptes testen, dort werden ein paar mehr Details bei Verbindungsproblemen ausgegeben:
https://github.com/mycloudrevolution/Advanced-PRTG-Sensors/blob/ConnectionDetails/Veeam/PRTG-VeeamBRStats.ps1
Guten Morgen Markus!
ich hatte sowohl als Parameter als auch fest im Script hinterlegt die übergabe des Hostnamen versucht, leider erfolglos.
Dein Neues Script hat auf Anhieb Funktioniert!
ich habe hier den Hostnamen mittels Parameter angegeben.
vielen Dank für deinen Support!
Voller Freude über die Sofort auftauchenden Kanäle habe ich dann übersehn das diese nach 30 Sekunden Rot aufgeleuchtet haben.
es kommt jetzt die Bestätigung meiner Vermutung:
1
Failed to connect to Veeam BR Host ‚XXXXX‘ with user ‚XXXXX$‘
</prtg
diese Fehlermeldung habe ich aus der Result Log Datei.
im PRTG Wird mir ein JSON Fehler angezeigt.
XML: Structural error in xml file, 3 open items. — JSON: Das zurückgelieferte JSON entspricht nicht der erwarteten Struktur (Invalid JSON.). (Code: PE231)
Das heißt, einmal hat die Abfrage geklappt und dann kam wieder ein Verbindungsfehler?
Sind der Server und der User die erwarteten bzw. Gewünschten?
ja zumindest du Kanäle wurden geladen.
ja ist alles korrekt.
Hallo,
Dieser Fehler kommt mir doch sehr komisch vor. Daher muss ich noch mal ein paar genauere Fragen stellen.
1. Klappt die Ausführung des Skripts
in der PowerShell auf dem Probe?
2. Klappt die Ausführung des Skripts direkt auf dem VBR server ohne zusätzliche Parameter?
Hi, thanks a lot for the script it works great!
I have a question regarding the colors… is there a way to change the color in PRTG if value=0 to green? Management people are very „visual“ and I will not that they see something red if everything is working fine.
If failed backup = 0 -> Green
If failed backup > 0 -> Red
Is it possible ?
Hi,
I am pretty sure this is possible, but I haven’t tried it so far.
Have you already tried to achieve by adjusting the upper and lower limits of the channel?
https://www.paessler.com/manuals/prtg/sensor_channels_settings
Hi, ich hänge gerade an exakt dem gleichen Fehler. Mein Szenario: zwei PRTG-Server, einmal Master, einmal Slave, beide haben die neueste Version deines Scripts hinterlegt, der Master-Server liest alles korrekt aus und zeigt mir OK, der Slave-Server zeigt „XML: Structural error in xml file, 3 open items. — JSON: Das zurückgelieferte JSON entspricht nicht der erwarteten Struktur (Invalid JSON.). (Code: PE231)“.
Start ich die PS händisch und lasse das Script laufen, kommen keine Fehlermeldungen, das XML-Gerüst wird schön abgebildet. Auch wenn ich das Ganze über die PSx64.exe mit Paramter starte, funktioniert alles. Ist doch merkwürdig, grundsätzlich läuft das Script, nur wenn PRTG es selber machen soll, läuft es auf einem Server und auf dem anderen nicht. Könnte es daran liegen, dass das Script zeitgleich von verschiedenen Servern ausgeführt wird?
Bin gerade weitergekommen, nachdem ich herausgefunden habe, dass die Sensoren in diesen Pfad schreiben:
C:ProgramDataPaesslerPRTG Network MonitorLogs (Sensors)
Habe auf beiden Servern geprüft, was in den zwei Text-Files steht und gesehen, dass es wohl Probleme gibt, wenn PRTG die PS ausführt. Was mir aufgefallen ist, dass er offenbar unter dem User des Lokalen Computerkontos versucht das ps1 auszuführen, obwohl im Sensor ja hinterlegt ist, welchen User er dafür verwenden soll und das beim Masterserver ja auch tut. Ich bin gerade etwas ratlos, wie ich hier weitermachen soll …
Hallo Toby,
es freut mich zu hören, dass du weitergekommen bist.
Ich verstehe leider nicht, das du mit Master und Slave meinst, geht es um einen dedizierten Probe?
Hallo,
vorerst vielen Dank für deine tolle Arbeit. Leider hab ich auf einem meiner Hosts seit kurzem ein Problem mit dem Sensor. Haben unlängst auf V10 upgegraded. Daran liegts aber nicht da das Script bei mir auf anderen Hosts mit V10 auch läuft.
Wenn ich es in der Powershell ausführe läufts ein Stück durch und dann kommt dieser Error:
C:Program Files (x86)PRTG Network MonitorCustom SensorsEXEXMLPRTG-VeeamBRStats.ps1 : Fehler beim Aufrufen der
Methode, da [Veeam.Backup.Core.CBackupRepository] keine Methode mit dem Namen “GetRepositoryStoragesSize” enthält.
In Zeile:1 Zeichen:1
+ &’C:Program Files (x86)PRTG Network MonitorCustom SensorsEXEXMLP …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,PRTG-VeeamBRStats.ps1
C:Program Files (x86)PRTG Network MonitorCustom SensorsEXEXMLPRTG-VeeamBRStats.ps1 : bei ,
C:Program Files (x86)PRTG Network MonitorCustom SensorsEXEXMLPRTG-VeeamBRStats.ps1: Zeile 544
bei , : Zeile 1
In Zeile:1 Zeichen:1
+ &’C:Program Files (x86)PRTG Network MonitorCustom SensorsEXEXMLP …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,PRTG-VeeamBRStats.ps1
1
Fehler beim Aufrufen der Methode, da [Veeam.Backup.Core.CBackupRepository] keine Methode mit dem Namen “GetRepositoryStoragesSize” enthält.
Bin ratlos, wär toll wenn du mir weiterhelfen könntest.
Hallo Roman,
Verwendest die neuste Version aus dem GitHub Repo?
https://github.com/mycloudrevolution/Advanced-PRTG-Sensors/tree/master/Veeam/PRTG-VeeamBRStats.ps1
Was hast du dort alles für Repositories an dem host?
Hallo Markus,
Ja ich verwende die neueste Version aus dem github repo.
Repos sind momentan auf einer NAS, eine USB HDD u. jetzt ist eben eine Cloud Repo dazugekommen. Platform ist Hyper-V mit 4 VM´s.
Glaub es liegt an der Cloud Repo, seitdem funktioniert das Script auch eigentlich nicht mehr.
Danke für deine Hilfe.
Okay, das ist seltsam. Ich hatte das Cloud Repo Problem eigentlich mit einem der letzten commits gelöst.
Würdest du bitte folgende Details teilen?
Get-VBRBackupRepository | select name,type
PS C:UsersAdministrator> Get-VBRBackupRepository | select name,type
Name Type
—- —-
Default Backup Repository WinLocal
USB_HDD WinLocal
NAS1 CifsShare
Cloud repository 1 Cloud
NAS2 CifsShare
Würdest du bitte noch mal die neuster Version aus dem Repo laden und testen?
https://www.github.com/mycloudrevolution/Advanced-PRTG-Sensors/tree/master/Veeam%2FPRTG-VeeamBRStats.ps1
Das Problem dürfte so nicht auftreten.
habs nochmal runtergeladen u. kopiert…selber error…ist definitiv die letzte version ausm master branch.
Könntest du diesen Teil des Skripts einmal manuell ausführen und die drei Variablen prüfen?
[Array]$AllRepos = Get-VBRBackupRepository | Where-Object {$_.Type -notmatch “SanSnapshotOnly“} # Get all Repositories Except SAN
[Array]$CloudRepos = $AllRepos | Where-Object {$_.Type -match “Cloud“} # Get all Cloud Repositories
[Array]$repoList = $AllRepos | Where-Object {$_.Type -notmatch “Cloud“} # Get all Repositories Except SAN and Cloud
Es wäre wichtig ob in $repoList auch das Cloud repository auftaucht. Eigentlich sollte das nur in $CloudRepos sein.
Ja das passt so.
PS C:UsersAdministrator> Get-VBRBackupRepository | Where-Object {$_.Type -notmatch “SanSnapshotOnly“}
Name Type Host FriendlyPath Description
—- —- —- ———— ———–
Default Backup Repository WinLocal SRVHOST C:Backup Created by Veeam Backup
USB_HDD WinLocal SRVHOST E:Backup Created by SRVHOSTAdmini…
NAS1 CifsShare SRVHOST \192.168.1…. Created by SRVHOSTAdmini…
Cloud repository 1 Cloud veeamcc1.clo… obv Cloud repository
NAS2 CifsShare SRVHOST \192.168.1…. NAS NEU
PS C:UsersAdministrator> Get-VBRBackupRepository | Where-Object {$_.Type -match „Cloud“}
Name Type Host FriendlyPath Description
—- —- —- ———— ———–
Cloud repository 1 Cloud veeamcc1.clo… obv Cloud repository
PS C:UsersAdministrator> Get-VBRBackupRepository | Where-Object {$_.Type -notmatch „Cloud“}
Name Type Host FriendlyPath Description
—- —- —- ———— ———–
Default Backup Repository WinLocal SRVHOST C:Backup Created by Veeam Backup
USB_HDD WinLocal SRVHOST E:Backup Created by SRVHOSTAdmini…
NAS1 CifsShare SRVHOST \192.168.1…. Created by SRVHOSTAdmini…
NAS2 CifsShare SRVHOST \192.168.1…. NAS NEU
Okay, das wird immer seltsamer.
Ich habe eine modifizierte Version mit einer „Debug“ Ausgabe
"Start Processing '$($r.Name)'..."
vor der problematischen Funktion erstellt. Würdest du das bitte noch mal testen?https://github.com/mycloudrevolution/Advanced-PRTG-Sensors/blob/DENUG-Roman/Veeam/PRTG-VeeamBRStats.ps1
DEBUG: Starting to Process Connection to ‚localhost‘ with user ‚Administrator‘ …
Bestätigung
Vorgang fortsetzen?
[J] Ja [A] Ja, alle [B] Befehl anhalten [H] Anhalten [?] Hilfe (Standard ist „J“): A
DEBUG: Connecting BRHost ‚localhost‘ with user ‚Administrator’…
Bestätigung
Vorgang fortsetzen?
[J] Ja [A] Ja, alle [B] Befehl anhalten [H] Anhalten [?] Hilfe (Standard ist „J“):
Successful-Backups
1
1
1
Warning-Backups
0
1
1
0
1
Failes-Backups
0
1
1
0
1
Failed-Backups
0
1
1
0
1
Running-Backups
0
1
1
TotalBackupRead
28
Custom
GB
1
1
TotalBackupTransfer
5
Custom
GB
1
1
Successful-BackupCopys
0
1
1
Warning-BackupCopys
0
1
1
0
1
Failes-BackupCopys
0
1
1
0
1
Failed-BackupCopys
0
1
1
0
1
Running-BackupCopys
0
1
1
Idle-BackupCopys
0
1
1
Successful-Replications
0
1
1
Warning-Replications
0
1
1
0
1
Failes-Replications
0
1
1
0
1
Failed-Replications
0
1
1
0
1
Running-Replications
0
1
1
Successful-Endpoints
0
1
1
Warning-Endpoints
0
1
1
0
1
Failes-Endpoints
0
1
1
0
1
Running-Endpoints
0
1
1
DEBUG: Veeam.Backup.Model.CBackupRepositoryInfo
Bestätigung
Vorgang fortsetzen?
[J] Ja [A] Ja, alle [B] Befehl anhalten [H] Anhalten [?] Hilfe (Standard ist „J“):
DEBUG: Veeam.Backup.Model.CBackupRepositoryInfo
Bestätigung
Vorgang fortsetzen?
[J] Ja [A] Ja, alle [B] Befehl anhalten [H] Anhalten [?] Hilfe (Standard ist „J“):
DEBUG: Veeam.Backup.Model.CBackupRepositoryInfo
Bestätigung
Vorgang fortsetzen?
[J] Ja [A] Ja, alle [B] Befehl anhalten [H] Anhalten [?] Hilfe (Standard ist „J“):
DEBUG: Veeam.Backup.Model.CBackupRepositoryInfo
Bestätigung
Vorgang fortsetzen?
[J] Ja [A] Ja, alle [B] Befehl anhalten [H] Anhalten [?] Hilfe (Standard ist „J“):
DEBUG: Cloud Repo Section Entered…
Bestätigung
Vorgang fortsetzen?
[J] Ja [A] Ja, alle [B] Befehl anhalten [H] Anhalten [?] Hilfe (Standard ist „J“):
C:\Program Files (x86)\PRTG Network Monitor\Custom Sensors\EXEXML\PRTG-VeeamBRStats.ps1 : Fehler
beim Aufrufen der Methode, da [Veeam.Backup.Core.CBackupRepository] keine Methode mit dem Namen
„GetRepositoryStoragesSize“ enthält.
In Zeile:1 Zeichen:1
+ .\PRTG-VeeamBRStats.ps1 -DEBUG
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,PRTG-VeeamBRStats
.ps1
C:\Program Files (x86)\PRTG Network Monitor\Custom Sensors\EXEXML\PRTG-VeeamBRStats.ps1 : bei
, C:\Program Files (x86)\PRTG Network Monitor\Custom
Sensors\EXEXML\PRTG-VeeamBRStats.ps1: Zeile 533
bei , : Zeile 1
In Zeile:1 Zeichen:1
+ .\PRTG-VeeamBRStats.ps1 -DEBUG
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,PRTG-VeeamBRStats
.ps1
1
Fehler beim Aufrufen der Methode, da [Veeam.Backup.Core.CBackupRepository] keine Methode mit dem Namen „GetRepositoryStoragesSize“ enthält.
Vielen Dank. Ich hatte den Fehler ein einer völlig anderen Stelle Vermutet, aber eigentlich nur nicht ordentlich den Fehler gelesen. Man Sollte kein Code Debug mal kurz zwischen durch machen…
Ich kann das leider nicht selbst testen, da ich kein Cloud Repo in meinem „Lab“ habe. Ich versuch das Problem aber mit dem Spender des Code-Snippets zusammen zu lösen, bzw. einen anderen Weg zu finden.
Das Problem liegt wohl bei der verwendeten Methode „[Veeam.Backup.Core.CBackupRepository]::GetRepositoryStoragesSize($CloudRepos.Id.Guid)“, welche in v10 weder for normal noch für Cloud Repos funktioniert (Siehe auch: https://forums.veeam.com/powershell-f26/veeam-10-getrepositorystoragessize-repo-id-t65281.html).
Alles klar, vielen Dank für deine Hilfe. Falls du jemanden zum testen brauchst meld dich per email bei mir. Hoffe ihr findet eine Lösung.
sollte die links vielleicht auch lesen die du postest…xD
Besagtes “GetRepositoryStoragesSize” in “GetRepositoryBackupsSize” geändert im script.
funktioniert wieder.
😉
Sehr gut. Passen die Werte auch?
Ja. Werte sehen korrekt aus.
I just wanted to poke my head in here and give a quick note for people to make it easier on them. I can tell you Markus is great. He is a great script writer and an even better at technical support. He spent allot of time with me in email getting it to work for me. The Exec team loves this sensor. So much info. But I figured I would take a minute and explain some things I went though to make it easier for others as they try to implement this.
Important default paths:
C:Program Files (x86)PRTG Network MonitorCustom SensorsEXEXML
C:ProgramDataPaesslerPRTG Network MonitorLogssensors
****If your backup server is not a “Domain Joined” server, you’re gonna have problems, but they can be worked around. The biggest issue I had was the fact that my server was not domain joined (a best practice for security BTW). The fix for this? Make your backup server a Probe in PRTG. This allows this script to run locally and fixes allot of your issues. Trust me, it was two days just trying to get this to work from the core. ****
1. Set the PRTG service to use the local admin of the server to run. Best if the Local Veeam User is the local admin. This will make your life much easier.
2. Put the “PRTG-VeeamBRStats.ps1” and the “PSx64.exe” in the C:Program Files (x86)PRTG Network MonitorCustom SensorsEXEXML folder.
3. Open both Powershell (x86) and Powershell as admin and run this: Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine (PRTG uses 32bit PS by default, but need to have 64bit PS set the same way)
4.Open the Veeam B&R Console, Click on the three lines in the upper left corner, then select “Console” then “Powershell” Once it opens run this command: Get-PSSnapin -Registered | fl *
Then run this command: Add-PSSnapin VeeamPSSnapin
Then run this command: Connect-VBRServer -Server localhost (Only if running the backup server as a probe, You need to run Connect-VBRServer -Server “” if you are doing this from the core server)
5. In the same window change the directory to C:Program Files (x86)PRTG Network MonitorCustom SensorsEXEXML. Then run this command .PRTG-VeeamBRStats.ps1. This will take a minute to run. (Be sure to use the . in front of the command or it will error.) This will show you results of what the sensor is going to monitor. (This command will only work this way if you are using the backup server as a probe. From the Core it is a different command) If you received results and no errors then everything is working properly. Now you can create your sensor!
6. When setting up the sensor in PRTG, always use the EXE/XML Advanced sensor. The Standard doesn’t work.
7. Edit the settings of the “Probe Device” to not inherit Credentials for Windows Systems and fill in the Local Admin (veeam user) in the user and password fields. (For me, leaving the Domain or Computer name line blank worked best) **This may not be needed with how I was able to set up the sensor and after setting the PRTG service to use the Local Admin Veeam User**
8. For the sensor settings in the EXE/Script dropdown choose the PSx64.exe.
Fill in the parameters with this. -f=”PRTG-VeeamBRStats.ps1″ (This is only if you are setting up your backup server as a probe, this is if you are running the script locally)
Leave Environment Default
Use Security Context of probe service (This is why you set the PRTG service to use the Local Admin Veeam User)
Provide a Mutex Name (I used VeeamMuTex)
Timeout set to at least 120 Seconds. I was playing with this and set mine to 300. Not sure how much of a difference that makes)
Set the EXE Result to “Write EXE Result to Disk”. (You WILL need to use this, trust me)
Leave the rest default
Save your sensor
Wait a few minutes for the sensor to run.
There are a few errors that may pop up. JSON was one I had, but the new script Markus has put up corrected that. Access Denied may happen as well, adjusting the PRTG service to use the Local Admin Veeam User corrected that. If you are getting errors, the best thing to do is look at the logs. The path for the logs is listed at the top of this post. Use it. It gives you the info you need, trust me. Your sensor will have an ID number. In the log folder each log is named for the sensor ID. You will need to look at 2 different logs. The “Result of Sensor(ID).Data” and the “Result of Sensor(ID). The first will show you the information that PRTG is using to get the data (I.E. username, port, ETC, and at the top it will tell you what error it has.), the second is showing you the result of the sensor action. This one helped me the most. It showed me the PS errors. The final error that I was getting, fixed with a new script from Markus, also corrected the JSON error I was getting. Being able to provide that error to Markus is what helped get the solution.
Hopefully this will help someone else. I may have missed something. It was a few days of pulling my hair out on this to get it working and I don’t remember everything I did, but I do believe that with Markus’ help and these changes this is what worked for me.
Please remember, this is geared towards setting up this script on the backup server that is set as a probe in PRTG because it is not domain joined. If you are not setting up the script locally on your backup server and instead are doing it from your PRTG Core, the commands and settings will be different. However, many of the commands in here are just slightly modified to be used locally.
Here are some of the changes from Remote to Local:
Script in PRTG Sensor Settings:
Remote: -f=”PRTG-VeeamBRStats.ps1″ -p=”-BRHost **Your FQDN or IP**”
Local: -f=”PRTG-VeeamBRStats.ps1″
Testing your script using the -Debug option to see where it is broken:
Remote: PRTG-VeeamBRStats.ps1 -BRHost “**Your FQDN or IP**” -Debug
Local: .PRTG-VeeamBRStats.ps1 -Server localhost -Debug
A HUGE shout out to Markus, not only for writing this amazing script, but for being so patient and helpful in getting it running for me. I look like a superhero to my Executive team, but in reality Markus is the real hero!!
Thank you all and the best of luck getting this set up. It’s an amazing script and an awesome PRTG sensor.
Many thanks for the kind words.
Hallo Markus,
super Skript, es erleichtert einem das Prüfen der Datensicherungen ungemein!!
Allerdings habe ich mit der aktuell verfügbaren GitHub-Version (16.09.2020) ein Problem.
Ich möchte die Veeam Konsole nicht mehr auf der PRTG Probe installiert haben, also möchte ich den Parameter -PSRemote nutzen.
Das funktioniert soweit auch, im Log des Sensors kommen Daten an. Aber irgendwo im Script kommt er auf einen ObjectNotFound-Fehler, siehe nachfolgend.
Zudem habe ich noch ein zweites Problem:
Mir wird unser Backup Copy nicht angezeigt. Die Werte dafür stehen alle auf 0.
Bei unseren Kunden funktioniert das, nur bei uns nicht.
Kannst Du mir bei diesen beiden Problemen weiterhelfen?
Vielen Dank!!
Successful-Backups
1
1
1
Warning-Backups
0
1
1
0
1
Failes-Backups
0
1
1
0
1
Failed-Backups
0
1
1
0
1
Running-Backups
0
1
1
TotalBackupRead
0
Custom
GB
1
1
TotalBackupTransfer
0
Custom
GB
1
1
Successful-BackupCopys
0
1
1
Warning-BackupCopys
0
1
1
0
1
Failes-BackupCopys
0
1
1
0
1
Failed-BackupCopys
0
1
1
0
1
Running-BackupCopys
0
1
1
Idle-BackupCopys
0
1
1
Successful-Replications
0
1
1
Warning-Replications
0
1
1
0
1
Failes-Replications
0
1
1
0
1
Failed-Replications
0
1
1
0
1
Running-Replications
0
1
1
Successful-Endpoints
0
1
1
Warning-Endpoints
0
1
1
0
1
Failes-Endpoints
0
1
1
0
1
Running-Endpoints
0
1
1
C:\Program Files (x86)\PRTG Network Monitor\custom sensors\EXEXML\_PRTG-VeeamBRStats_2020_04.ps1 :
Die Benennung „Disconnect-VBRServer“ wurde nicht als Name eines Cmdlet, einer Funktion, einer
Skriptdatei oder eines ausfhrbaren Programms erkannt. šberprfen Sie die Schreibweise des Namens,
oder ob der Pfad korrekt ist (sofern enthalten), und wiederholen Sie den Vorgang.
In Zeile:1 Zeichen:137
+ … ll.Utility};&’C:\Program Files (x86)\PRTG Network Monitor\custom sens …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Disconnect-VBRServer:String) [_PRTG-VeeamBRStats_20
20_04.ps1], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException,_PRTG-VeeamBRStats_2020_04.ps1
Hallo Daniel,
es freut mich zu hören, dass das Skript dir die Arbeit erleichtert.
Leider kommt die Ausgabe des XML in WordPress Kommentaren immer nur komplett unlesbar an.
-> Gerne kannst du auch einen GitHub Issue eröffnen, dort ist das wesentlich besser (https://github.com/vMarkusK/Advanced-PRTG-Sensors/issues)
Ich würde dich bitten für das Backup Copy Problem einmal mit Debug zu arbeiten: ‚PRTG-VeeamBRStats.ps1 -BRHost localhost -Debug‘
Kommt ein ähnlicher Fehler auch wenn du das Skript lokal auf dem Veeam Server ausführst oder nur wenn PS-Remote benutzt?
Beste Grüße
Markus
Hi nochmal Markus,
mir ist gerade aufgefallen, dass nicht nur das Backup Copy abgeht.
Insgesamt sind es drei Jobs, nur einer wird angezeigt.
Unseren Cluster (zwei HyperVs und einen eigenständigen HyperV) sichere ich per Agent Job.
Dieser Agent Job wird per Backup Copy in die Cloud geschickt.
(Somit habe ich nur drei VMs, die bezahlt werden müssen.)
Kann es sein, dass das Skript keine Agent Backups erkennt?
MfG
Daniel
Hallo Daniel,
ich muss gestehen, dass das komplette Skript noch nie mit Hyper-V getestet wurde. Ich bin ehr immer auf VMware unterwegs.
Agent Jobs sollten eigentlich mit der aktuellen Version aus dem Repo (https://github.com/vMarkusK/Advanced-PRTG-Sensors/blob/master/Veeam/PRTG-VeeamBRStats.ps1) ebefalls erfasst werden.
Könntest du das mal testen mit ‚Get-VBREPSession‘?
Welche Veeam Version setzt du ein?
Beste Grüße
Markus
Hallo Markus,
danke für die schnelle Rückmeldung!
Ich benutze das Script aus Deinem Link.
Habe den PowerShell-Befehl bei uns und einem Kunden mit Veeam 10.0.1.4854 getestet.
Ich habe bereits alle Kunden auf der Version, kann also mit älteren nicht mehr testen.
Beide Male dieses Ergebnis:
PS C:\Users\admin.xyz> Get-VBREPJob
PS C:\Users\admin.xyz>
Vielen Dank!!
MfG
Daniel
Hallo,
Das Cmdlet, dass in dem Skript genutzt wird scheint nicht alle Agent Jobs zu erfassen:
https://helpcenter.veeam.com/docs/backup/powershell/get-vbrepjob.html
Ich werde mir das mal näher anschauen und bescheid geben.
Hast du zu dem anderen Problem auch eine Rückmeldung für mich?
Servus Markus,
super, danke!
Nein, zum zweiten Problem bin ich aus Zeitmangel noch nicht gekommen.
Werde das aber sicher in ca. 2 Wochen machen!
Vielen Dank schon mal!!
MfG Daniel
Hallo! Erstmal vielen Dank für das Skript! Das hat bis jetzt super bei uns funktioniert.
Wir haben letzte Woche einen neuen Backupserver erhalten und diesen nun aus Securitygründen nicht mehr in die Domäne aufgenommen.
Seitdem funktioniert das Skript nicht mehr. Auch wenn man in PRTG die richtigen Userdaten einträgt. Wenn ich von unserer Probe aus das Skript mit runas /u:servertest /netonly powershell.exe und anschließend in der Powershell mi PSx64.exe starte funktioniert es. PRTG gibt laut Sensorlogs auch die Credentials richtig mit.
Die Probe ist in der Domäne. Hat jemand eine Idee?
Hi Daniel,
Sehr gute Entscheidung das etwas weiter zu trennen. Meist reichte es aber auch schon das Repo aus der Domäne zu nehmen, wenn ansonsten sauber mit den Berechtigung umgegangen wird (nur die minimalen).
Die übliche Lösung für dein PRTG Problem ist, auf den Backup Server auch einen Probe zu installieren. Den Dienst dann mit einem User starten, der in Veeam Rechte hat und dann sollte das wieder klappen.
Hallo Markus,
danke für dein Feedback. So machen wir das!
Moin,
nach dem Update auf VBR 11 (11.0.0.837) und installierter Konsole auf der Probe erhalte ich die ganz weit oben geführten Fehler PE233 und PE231. Starte ich das Skript mal direkt heißt es “Failed to load Snapin”. Was kann man tun? Vielen Dank im Voraus!
Grüße
Hi Claas,
Ich arbeite bereits an der v11 compatibility. Ich melde mich sobald alle Probleme gelöst sind.
Beste Grüße
Markus
Moin,
würdest du mal diese Version Testen:
https://github.com/vMarkusK/Advanced-PRTG-Sensors/blob/vMarkusK-v11/Veeam/PRTG-VeeamBRStats.ps1
Hallo Markus,
gerade ans PRTG gebunden und bisher sieht das super aus! Vielen, lieben Dank für die prompte Hilfe! Klasse! 1********
Gruß,
Claas
Super.
Vielen Dank für die Rückmeldung. Ich versuche das dann noch multi version fähig zu machen und merge das in den Master.
Beste Grüße
Markus
Hi Markus,
ich habe dein Script nun zum laufen bekommen, nach etwas Debuggingzeit 🙂
Ich nutze Veeam 11 und mir fehlt aktuell noch die Erkennung von File Backups ( File Share )
Könntest du dies vielleicht mit integrieren
VG
Sascha
Hi,
Das ist schön zu hören. Woran lag es denn?
Ein anderer Nutzer hat dazu bereits einen PR mit diesem Feature erstellt. Allerdings noch auf Basis von v10.
https://github.com/vMarkusK/Advanced-PRTG-Sensors/pull/72
Wenn ich mal wieder etwas mehr Zeit habe werde ich das versuchen zu mergen.
Gerne aber schon mal den PR testen und kommentieren.
Hallo zusammen
bei mir funktioniert das Script nicht mit der Version 11, was habt ihr noch angepasst damit es bei euch funktioniert? Der Fehler ist bei mir das nicht vorhandene VeeamPSSnapin:
Get-PSSnapin : Es wurden keine Windows PowerShell-Snap-Ins gefunden, die dem Muster “VeeamPSSnapin” entsprechen.
Besten Dank für eure Tips
Manfred
Hallo Manfred,
Nutzt du die aktuelle Version aus dem GitHub Repo?
Beste Grüße
Markus
Hallo Markus
ja die Version die du ein paar Beiträge oberhalb verlinkt hast:
https://github.com/vMarkusK/Advanced-PRTG-Sensors/blob/vMarkusK-v11/Veeam/PRTG-VeeamBRStats.ps1
Beste Grüsse
Manfred
Hallo,
Die Änderungen, plus weitere Verbesserungen, sind mittlerweile in der Master branch. Gerne diese noch einmal testen.
Es sieht so aus, als würde das neuen PowerShell Module nicht gefunden und der fallback auf das SnapIn Versuch.
Kannst du noch mal prüfen ob das Module da ist?
„Get-Module -ListAvailable -Name Veeam*“
Hallo Markus
“Get-Module -ListAvailable -Name Veeam*” zeigt er folgende geladene Module:
Veeam.Backup.PowerShell, Veeam.Exchange.PowerShell, Veeam.SharePoint.PowerShell, Veeam.SQL.PowerShell, Veeam.ActiveDirectory.PowerShell, Veeam.Oracle.PowerShell und Veeam.Teams.PowerShell
Das sollte passen.
Hast du noch mal die neue Version aus der Master branch versucht?
Seit dem Update auf Veeam 11 erhalte ich trotz der letzten Version von PRTG-VeeamBRStats.ps1 den Fehler XML: The returned XML does not match the expected schema. (code: PE233) — JSON: The returned JSON does not match the expected structure (Invalid JSON.). (code: PE231) in PRTG
manuell mit cmd (Adminmodus) über den Befehl PSx64.exe” -f=PRTG-VeeamBRStats.ps1 bekomme ich korrekte Werte.
Im Sensorlog von PRTG finde ich folgendes:
Data[‘linuxloginpassword’].asString := ”;
Data[‘notonpod’].asString := ‘0’;
Data[‘fastcount’].asString := ‘0’;
Data[‘lastmsg’].asString := ‘#Y2 @#O233 @#O231[Invalid JSON.]’;
Data[‘resultfile’].asString := ‘Result of Sensor 27306.txt’;
Data[‘windowsloginusername’].asString := ‘Administrator’;
Data[‘hostv6’].asString := ”;
Data[‘exefile’].asString := ‘PSx64.exe’;
Data[‘lastuptime’].asString := ‘0’;
Data[‘writeresult’].asString := ‘2’;
Data[‘blockedsens’].asString := ”;
Data[‘reqmsginterval’].asString := ‘21600’;
Data[‘windowslogindomain’].asString := ‘***.local’;
Data[‘tlsexplicit_imap’].asString := ”;
Data[‘channelnames’].asString := ”;
Data[‘tlsexplicit_default’].asString := ”;
Data[‘canlinux’].asString := ‘0’;
Data[‘isexesensor’].asString := ‘1’;
Data[‘windowsloginpassword’].asString := ‘***’;
Data[‘environment’].asString := ”;
Data[‘mutexname’].asString := ”;
Data[‘channelinfos’].asString := ‘{}’;
Data[‘uptimecount’].asString := ‘0’;
Data[‘reboot’].asString := ‘44261.3547009375’;
Data[‘usednstime’].asString := ‘0’;
Data[‘newpowershell’].asString := ‘0’;
Data[‘linuxlogindomain’].asString := ”;
Data[‘tlsexplicit_port’].asString := ”;
Data[‘monitorchange’].asString := ”;
Data[‘inerror’].asString := ‘1’;
Data[‘sensorid’].asString := ‘27306’;
Data[‘ipversion’].asString := ‘0’;
Data[‘tlsexplicit_smtp’].asString := ”;
Data[‘host’].asString := ‘127.0.0.1’;
Data[‘exeparamslist’].asString := ”;
Data[‘usewindowsauthentication’].asString := ‘0’;
Data[‘simulate’].asString := ‘0’;
Data[‘tlsexplicit_ftp’].asString := ”;
Data[‘timeout’].asString := ’60’;
Data[‘exeparams’].asString := ‘-f=”PRTG-VeeamBRStats.ps1″‘;
Data[‘momopersistent’].asString := ”;
Data[‘tlsexplicit_pop3’].asString := ”;
hat jemand eine Idee, was ich falsch mache?
Kannst du mal das Script mit dem Parameter „-Debug“ manuell in der PowerShell ausführen und die Rückgabe der repositories und eventuelle Fehlermeldungen teilen?
Ich habe es jetzt nochmals mit der aktuellsten Version getestet, leider ohne Erfolg. Meine Meldung ist die gleiche wie bei Marlon, hier mit -debug:
Successful-Backups
1
1
1
Warning-Backups
0
1
1
0
1
Failes-Backups
0
1
1
0
1
Failed-Backups
0
1
1
0
1
Running-Backups
0
1
1
TotalBackupRead
62
Custom
GB
1
1
TotalBackupTransfer
28
Custom
GB
1
1
Successful-BackupCopys
0
1
1
Warning-BackupCopys
0
1
1
0
1
Failes-BackupCopys
0
1
1
0
1
Failed-BackupCopys
0
1
1
0
1
Running-BackupCopys
0
1
1
Idle-BackupCopys
0
1
1
Successful-Replications
0
1
1
Warning-Replications
0
1
1
0
1
Failes-Replications
0
1
1
0
1
Failed-Replications
0
1
1
0
1
Running-Replications
0
1
1
Successful-Endpoints
0
1
1
Warning-Endpoints
0
1
1
0
1
Failes-Endpoints
0
1
1
0
1
Running-Endpoints
0
1
1
DEBUG: Veeam.Backup.Model.CBackupRepositoryInfo
REPO – *****S02
33
Percent
1
1
20
10
1
Repository Name Free (GB) Total (GB) Free (%) Status
————— ——— ———- ——– ——
*****S02 12699.93 38935.69 33 OK
Successful Backups : 1
Warning Backups : 0
Failes Backups : 0
Failed Backups : 0
Running Backups : 0
Total Backup Transfer : 28
Total Backup Read : 62
Warning BackupCopys : 0
Failes BackupCopys : 0
Failed BackupCopys : 0
Running BackupCopys : 0
Idle BackupCopys : 0
Successful Replications : 0
Warning Replications : 0
Failes Replications : 0
Failed Replications : 0
Running Replications : 0
Seccessful Endpoints : 0
Warning Endpoints : 0
Failes Endpoints : 0
Running Endpoints : 0
Hallo,
Das sieht doch eigentlich gut aus.
Möglich Fehler wären jetzt noch:
– Name des Repo bricht das xml schema (deshalb hatte ich danach gefragt). Hat der Name Sonderzeichen?
– der User den PRTG nutzt hat in irgendeiner Form Berechtigungsprobleme
Sorry die Formatierung ist wohl verloren gegangen…
Hier der Anfang
Successful-Backups
1
1
1
Warning-Backups
0
1
1
0
1
Failes-Backups
0
1
1
0
1
Failed-Backups
0
1
1
0
1
Running-Backups
0
1
1
TotalBackupRead
62
Custom
GB
1
1
TotalBackupTransfer
28
Custom
GB
1
1
Successful-BackupCopys
0
1
1
Warning-BackupCopys
0
1
1
0
1
Failes-BackupCopys
0
1
1
0
1
Failed-BackupCopys
0
1
1
0
1
Running-BackupCopys
0
1
1
Idle-BackupCopys
0
1
1
Successful-Replications
0
1
1
Warning-Replications
0
1
1
0
1
Failes-Replications
0
1
1
0
1
Failed-Replications
0
1
1
0
1
Running-Replications
0
1
1
Successful-Endpoints
0
1
1
Warning-Endpoints
0
1
1
0
1
Failes-Endpoints
0
1
1
0
1
Running-Endpoints
0
1
1
DEBUG: Veeam.Backup.Model.CBackupRepositoryInfo
Habe das selbe Thema wie Manfred
Dass das xml nicht dem schema entspricht ist leider ein sehr generischer Fehler von PRTG und kann viele Ursachen haben.
Meinst du diesen Fehler?
Wenn ja, würde ich dich ebenfalls bitten das Script mit -Debug einmal auf dem vbr server auszuführen.
Das Resultat bitte nicht hier posten sondern extern bereitstellen danke.
BTW frühere Version unter 9 und 10 liefen Tadellos
Sicher, dass das auch per PS Remote war oder ist da nicht doch auch die veeam Konsolen installiert (was sein Problem auch jetzt lösen würde?
Hallo Markus, nun läuft es bei mir nach dem Server Neustart, habe aber nichts mehr geändert. Danke Dir trotzdem für Deine Hilfe und die super Arbeit!
Gruss Manfred
Hallo Markus
Herzlichen Dank für das tolle Skript. Es hat bei mir nun jahrelang funktioniert. Leider musste ich jetzt den PRTG und den Veeam-Server neu aufsetzten und kriege jetzt das Skript nicht mehr zum laufen. Natürlich habe ich jeweils die neusten Versionen installiert (PRTG und Veeam). Dein Skript ist ebenfalls aktuell (2.0.1 vom 16.3.2021).
Wenn ich das Skript manuell mit dem PRTG-Benutzer starte (Aufruf der PSx64.exe inkl. Argumenten via PS) erhalte ich eine Ausgabe mit xml-Struktur. Soweit so gut…
In PRTG selbst erhalte ich aber die Fehler PE233 (XML entspricht nicht dem erwarteten Schema) und PE231 (JSON entspricht nicht der erwarteten Struktur).
Woran kann das liegen?
Hallo Simon,
der XML Fehler ist leider sehr generisch in PRTG.
Um den genauen Grund zu prüfen solltest du das Log für den Sensor aktivieren und in das Log schauen.
Aufgrund deiner Beschreibung vermute ich, dass es mit diesen Problemen identisch ist, die seit v11 auftreten:
https://github.com/vMarkusK/Advanced-PRTG-Sensors/issues/80
https://github.com/vMarkusK/Advanced-PRTG-Sensors/issues/77
https://github.com/vMarkusK/Advanced-PRTG-Sensors/issues/81
Ich bin immer noch an der Analyse dran. Es scheint aber nicht so trivial zu sein unter welchen Umständen das auftritt.
Scheint ein Berechtigungsproblem zu sein und deckt sich mit issue #80:
Disconnect-VBRServer : Der Zugriff auf den Pfad “Veeam\Backup” wurde verweigert.
Hab den Sensor gestern gelöscht und neu erstellt… Im Log von gestern steht interessanterweise was Anderes:
Failed to connect to Veeam BR Host ‘VeeamServerName’ with user ‘PRTGServerName$’
Wenn ich das richtig interpretiere, möchte er sich mit dem Computer-Account verbinden und nicht mit dem User-Account. Kannst Du damit was anfangen?
Ja, das ist korrekt.
Das ist leider so, wenn der prtg probe service als „local system“ gestartet wird und der sensor auf „use security context of the probe“ steht.
Entweder probe als named user starten oder probe auf dem vbr server installieren und sensor umziehen.
Hallo konnte mein Problem lösen:
Es lag an den Ausführungsrichtlinien (Execution Policy) für PowerShell-Scripts. Das Skript wurde nicht ausgeführt da es aus dem Internet heruntergeladen wurde. Da ich die Richtlinien nicht umstellen wollte habe ich die Datei einfach neu erzeugt (Copy & Paste) danach hat das System dem Script wieder vertraut und jetzt ist alles gut.
Vielen Dank für den Support
Hi Markus
Herzlichen Dank für Deine Antwort! Der Sensor läuft nun!
Der Versuch, den PRTG-Computer in die Gruppe der lokalen Administratoren auf dem Veeam-Server aufzunehmen, hat leider keinen Erfolg gebracht…
Seit ich aber den PRTG Probe Service als prtg-User (hat in Veeam entsprechende Berechtigungen) und nicht mehr als System ausführe, funktioniert das Skript wie gewünscht!
Vielen Dank nochmal!
Hallo Markus,
also ich bekomm das ganze mit Veeam 9.5 U4 nicht zum laufen. Ich bekomme immer den Fehler: “No Veeam Modules found, Fallback to SnapIn”
Wenn ich aber die Befehle um die Version zu prüfen in der Powershell manuell eingebe liefert es mir brav die Ergebnisse welche das Script braucht. Der Aufruf findet natürlich über die PSx64.exe statt. Der User hat lokale Admin Rechte und ist auch der Backup User im Veeam. Der Backupserver ist non-domain und der Probe somit lokal am Backupserver installiert.
“PS C:Program Files (x86)PRTG Network MonitorCustom SensorsEXEXML> .PSx64.exe -f=”.PRTG-VeeamBRStats.ps1″
No Veeam Modules found, Fallback to SnapIn.
No Veeam Modules found, Fallback to SnapIn.
C:Program Files (x86)PRTG Network MonitorCustom SensorsEXEXMLPRTG-VeeamBRStats.ps1 : Failed to get Version from
Module or SnapIn
At line:1 char:1
+ &’.PRTG-VeeamBRStats.ps1′
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,PRTG-VeeamBRStats.ps1
C:Program Files (x86)PRTG Network MonitorCustom SensorsEXEXMLPRTG-VeeamBRStats.ps1 : at , C:Program
Files (x86)PRTG Network MonitorCustom SensorsEXEXMLPRTG-VeeamBRStats.ps1: line 165
at , : line 1
At line:1 char:1
+ &’.PRTG-VeeamBRStats.ps1′
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,PRTG-VeeamBRStats.ps1
1
Failed to get Version from Module or SnapIn
Da mir aktuell die Zeit fehlt auf Veeam 11 zu gehen wäre ich froh wenn wir es noch unter der 9.5er zum laufen bekommen.
SG
Hallo Florian,
Für eine schnelle Lösung würde ich dir empfehlen einfach eine ältere Version zu verwenden. Die aus diesem PR sollte klappen:
https://github.com/vMarkusK/Advanced-PRTG-Sensors/pull/57
Beste Grüße
Markus
Hallo Markus,
vielen Dank! Mit der alten Version klappt es tatsächlich wieder.
SG
Florian
Guten Morgen,
auch wir nutzen für die Veeam Backup-Überwachung der Kundenumgebungen dieses Script.
Bisher lief es auch bei allen Kunden weitestgehend Tadellos, aktuell habe ich bei einem Kunden den Fall das ich nach Umstellung in der Serverumgebung (Backup-Server wurde separiert) den Sensor nicht mehr zum laufen bekomme.
Zuvor befand sich die PRTG-Probe und Veeam- B&R auf der selben VM, jetzt wurde für Veeam B&R ein eigener Server erstellt. Ich habe das Script soweit angepasst, das der BRHost mit FQDN Namen (statt localhost) hinterlegt wurde, der Sensor liefert aber immer folgenden Fehler zurück:
“XML: Structural error in xml file, 2 open items. — JSON: Das zurückgelieferte JSON entspricht nicht der erwarteten Struktur (No mapping for the Unicode character exists in the target multi-byte code page). (Code: PE231)”
Führe ich das Script mit Powershell aus, erhalte ich folgende Meldung:
“PS C:Program Files (x86)PRTG Network MonitorCustom SensorsEXEXML> C:Program Files (x86)PRTG Network MonitorCustom SensorsEXEXMLPRTG-VeeamBRStats.ps1
No Veeam Modules found, Fallback to SnapIn.
C:Program Files (x86)PRTG Network MonitorCustom SensorsEXEXMLPRTG-VeeamBRStats.ps1 : Die Benennung “Disconnect-VBRServer” wurde nicht als Name
eines Cmdlet, einer Funktion, einer Skriptdatei oder eines ausführbaren Programms erkannt. Überprüfen Sie die Schreibweise des Namens, oder ob der
Pfad korrekt ist (sofern enthalten), und wiederholen Sie den Vorgang.
+ CategoryInfo : ObjectNotFound: (Disconnect-VBRServer:String) [PRTG-VeeamBRStats.ps1], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException,PRTG-VeeamBRStats.ps1″
Kann man Veeam und PRTG auf getrennten Servern betreiben oder sollte Probe & Veeam auf der selben VM sein? Ich habe hierzu einige Forenposts schon gelesen aber so eine Richtige Aussage zu dem Problem gab es bisher nicht.
Viele Grüße
Andreas
Hallo,
Es freut mich zu hören, dass du mit meinem kleinen Projekt deinen Kunden helfen kannst.
Ist auf dem Server auf dem das Script / der sensor ausgeführt wird die vbr Konsole installiert?
Beste Grüße
Markus Kraus
Hi Markus.
I am trying to set this up and currently am getting the following error:
‚A required privilege is not held by the client. (0x522)‘
I can open B&R console from the probe server and connect to the B&R server without issue. I can also directly run via powershell or CMD the following from the probe and get a working output:
PSx64.exe -f=“VeeamBRStats.ps1″ -p=“vbrhost“
I have ensured that the same credentials used to run CMD are being used in the sensor’s parent windows setting, and that the configuration of the sensor is as per your example.
Could you please advise?
Hi Giles,
Might you please try to reconfigure the Probe Service to Start as a User with access to Veeam and set the sensor to „use security context of the probe service“?
Best wishes
Markus
Hi Markus,
That’s sorted it! Thanks a lot 🙂
Cheers,
Giles
Hi, I have issue with „Access denied. Please check your Windows credentials. (code: PE095)“
other sensors work on parent device with windows credentials.
What could be the issue?
Thanks
Hi,
Might you please describe your setup a bit more detailed:
– where is the script executed (external probe or veeam Server itself)
– do you use psremote
– which versions do you use?
– is veeam Server a domain member
Best wishes
Markus
As this issue is based on the PRTG setup and not the script itself you can also try to address this on the peasler forum or to the PRTG support.
Danke für dieses super Skript! Wir hatten bei uns dieses Skript im Einsatz. Ich würde auch jetzt gerne wieder dieses Skript einsetzen um unseren neuen Veeam-Server zu überwachen.
gibt es die Möglichkeit, dass das Skript für Veeam-Server die nicht in der Domäne sind, anzupassen? Also dass auch Server ohne Domäne überwacht werden können?
Viele Grüße
Christoph
Hallo Christoph,
Schön zu hören, dass dir das Script hilft.
Entweder du installierst auf dem VBR Server selbst einen PRTG Probe und führst das Script lokal aus oder du nutzt die neuste Version und lieferst die Daten über einen geplanten Task auf dem VBR Server an PRTG.
For the latest features please use the Script: PRTG-VeeamBRStats-v3.ps1
– PSx64.exe is not required any more
– PRTG HTTP Push Sensor can be used (less load on PRTG Probe / more secure from VBR perspective)
Hallo Markus,
meine Probe und mein VBR Server sind auch verschiedene Server.
Ich habe leider keine Infos finden können, wie ich jetzt was mit dem Script anlegen muss, um das Script auf dem VBR Server laufen zu lassen und an die Probe zu Pushen.
Gibt es für dein Script 3.1 eine Installationsanleitung?
Hallo Patrick,
ich würde die Nutzung der aktuellen Version im GitHub Repo empfehlen:
https://github.com/vMarkusK/Advanced-PRTG-Sensors/blob/master/Veeam/PRTG-VeeamBRStats-v3.ps1
Für die Implementation gibt es grundsätzlich mehrere Möglichkeiten, die robusteste ist die Variante über PRTG HttpPush (https://www.paessler.com/manuals/prtg/http_push_data_advanced_sensor).
Dabei würde das Script am besten als Geplanter Task auf dem Veeam B&R Server laufen und direkt an den PRTG Server senden. Aufruf des Skripts sollte dann in etwa so aussehen:
PRTG-VeeamBRStats-v3.ps1 -httppush:$true -httpserver 10.10.10.10 -httptoken -httpport 5050
Hallo,
erhalte beim dem Advanced VeeamBRStats.ps1 folgenden fehler wenn ich es auf der Probe local laufen lasse.
1
Failed to load VeeamPSSnapIn
Wenn ich es auf dem Zioelhost laufen lasse bekomme ich immer diesen Fehler:
XML: Das zurückgelieferte XML entspricht nicht dem erwarteten Schema. (Code: PE233) — JSON: Das zurückgelieferte JSON entspricht nicht der erwarteten Struktur (Invalid JSON.). (Code: PE231)
Wir verwenden Veeam B&R V12. So wie ich das verstanden habe, gibt es in der V12 das PSSnapin nicht mehr, und es wird auf die Module zurückgegriffen. Über eine kleine Hilfestellung wäre ich dankbar.
Hallo Thorsten,
nutzt du die aktuellen Version im GitHub Repo?
https://github.com/vMarkusK/Advanced-PRTG-Sensors/blob/master/Veeam/PRTG-VeeamBRStats-v3.ps1
Das ist Korrekt, Veeam geht mittlerweile in Richtung PowerShell Module, ältere Skript-Versionen können damit aber noch nicht umgehen. Daher bitte die verlinkte Version nutzen.
Ist auf dem Probe bereits die Veeam B&R Konsole Installiert? Die Konsole bringt das PowerShell Modul mit.
Hallo,
ich erhalte folgende fehlermeldung zurück.
Failed to connect to Veeam BR Host ‚-BRHost 10.0.100.116‘ with user ‚VEEAM2$‘
Ich habe die PRTG Probe direkt auf dem Veeam Server installiert.
Wo kann ich credentials mit geben? „veeam2“ ist mein hostname. Warum versucht er sich mit „Veeam2$“ einzuloggen?
Ich habe den user „intranet-domain\veeam2$“ als Veeam admin hinzugefügt, das hat auch nicht funktioniert.
Das script funktioniert wenn man es direkt im powershell ausführt.
Moin Sebastian,
der Context in dem die Verbindung hergestellt wird, leitet sich vom User ab unter dem der Probe-Service gestartet ist. In deinem Fall ist da anscheinend „System“. Ich würde dir empfehlen einen Service-User zu erstellen, den Probe-Service mit dem User zu starten und dann den Service-User in Veeam B&R zu berechtigen.
Beste Grüße
Markus
Hallo, thanks for your works!!!
I’m testing it, but I have this error.
Any Ideas?
\Program Files (x86)\PRTG Network Monitor\custom sensors\EXE\PRTG-VeeamBRStats-v3.ps1 : The term ‚Disconnect-VBRServer‘ is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again. At line:1 char:1 + &’C:\Program Files (x86)\PRTG Network Monitor\custom sensors\EXE\PRTG … + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (Disconnect-VBRServer:String) [PRTG-VeeamBRStats.ps1], CommandNotFoundEx ception + FullyQualifiedErrorId : CommandNotFoundException,PRTG-VeeamBRStats.ps1 No Veeam Modules found, Fallback to SnapIn.
You can do a few more diagnostic steps:
– Run Script in Debug mode and Share the Results
PRTG-VeeamBRStats-v3.ps1 -Debug
– Start a PowerShell Session as the PRTG Probe User (Context of the Probe Service) and run the Script
– Enable logging for the Sensor and share the Output (Result Handling)
Please open a new GitHub Issue to share results: https://github.com/vMarkusK/Advanced-PRTG-Sensors/issues/
Hello Markus !
What a great script you have, i use it on every customer i have that uses veeam and it works like a charm 🙂
I am an it contractor for several clients by the way.
I have another case though :
We use an internal PRTG server that is not part of any domain.
We have that VEEAM server that is part of a domain.
I launch the script directly from the PRTG server with no probe with the folllowing parameters :
Script/EXE: psx64.exe
Parameters : -f=“scriptname“ -p=“FQDN of veeam server“
I have configured a service account that is admin of the targeted veeam server and is defined in the parent equipement.
Credentials work when i connect to the server but i get the following error : „Access denied. Please check your Windows credentials. (code: PE095)”
Any idea how i could make it work ?
Thanks in advance !
Hi Francois,
working accross domains / between doamin and Workgroup is always tricky.
I recommend using HTTP-Push:
PRTG-VeeamBRStats-v3.ps1 -httppush:$true -httpserver 10.10.10.10 -httptoken 24A26A91-D292-4FF7-895D-B5E128A4D6C9 -httpport 5050
https://www.paessler.com/manuals/prtg/http_push_data_sensor
– Schedule Script on the VBR Server as Windows Task
– Push Results to the PRTG Probe
-> No Authentication Issue