I understand that custom scripts are not supported, I am just trying to figure out why one server is working but the other isn't.
So we have 2 monitoring servers (different sites) We monitor the Hyper-V replication to the same host. Both version of PRTG are 21.2.68.1492 and both running windows server 2012 r2 with .Net 4.8.
I ran this script on both servers under an elevated powershell x86 command and they generate the xml properly.
#Script for Getting Primary Replication Percent Successful
# Arthur: Todd Kisida, todd.kisida@xbyte.com
#Takes list of servers in quote delimited by comma as a parameter
#Returns XML for PRTG Custom Advanced Sensor
#The Value returned for each VM is the percentage of successful replication cycles.
param(
[string]$Hypervservers
)
$ErrorActionPreference = "SilentlyContinue"
#start writing in XML
Write-host '<?xml version="1.0" encoding="UTF-8"?>'
Write-Host "<prtg>"
#Split the parameter into list of servers
$ServerList = $Hypervservers.Split(",")
foreach ($Hypervserver in $ServerList) {
#I had issues getting the remote server data unless I opened the remote session to the specific server I was getting the data about.
#Open a new remote PS session
$Session = New-PSSession -computername $Hypervserver
Import-PSSession $Session -Module Hyper-V -warningaction "SilentlyContinue" >$null
#Get the replication data
$VMReplication = Measure-VMReplication -computername $Hypervserver -ReplicationRelationshipType Simple | select VMname,SuccessfulReplicationCount,MissedReplicationCount
#Write the data for each VM as a PRTG channel
foreach ($Name in $VMReplication) {
#I couldn't get PRTG to display the percent with only 2 decimal places, so I rounded here
$AvgSuccess = [math]::Round(($Name.SuccessfulReplicationCount / ($Name.SuccessfulReplicationCount + $Name.MissedReplicationCount))*100,0)
$VM = $Name.VMName
#The Channel
Write-Host "<result>"
"<channel>$VM</channel>"
"<unit>Percent</unit>"
"<float>1</float>"
"<decimalMode>2</decimalMode>"
"<value>$AvgSuccess</value>"
"<LimitMinWarning>80</LimitMinWarning>"
"<LimitMinError>70</LimitMinError>"
"<LimitMode>1</LimitMode>"
"</result>"
}
#Close the remote PS session so it can be opened to the next host
Remove-PSSession $Session
}
#Close the XML
Write-Host "</prtg>"
#Exit code 0 so PRTG knows the script ran successfully
Exit 0
But when I add it to prtg as a sensor, one of the server is missing some of the data.
debug Output from PRTG the working server :
<prtg> <result> <channel>Server1</channel> <Unit>Percent</Unit> <Float>1</Float> <DecimalMode>2</DecimalMode> <value>100</value> <LimitMinWarning>80</LimitMinWarning> <LimitMinError>70</LimitMinError> <LimitMode>1</LimitMode> </result> <result> <channel>Server2</channel> <Unit>Percent</Unit> <Float>1</Float> <DecimalMode>2</DecimalMode> <value>100</value> <LimitMinWarning>80</LimitMinWarning> <LimitMinError>70</LimitMinError> <LimitMode>1</LimitMode> </result> </prtg>
Here is the debug output of the PRTG server that isn't working :
<channel>Server1</channel> <unit>Percent</unit> <float>1</float> <decimalMode>2</decimalMode> <value>100</value> <LimitMinWarning>80</LimitMinWarning> <LimitMinError>70</LimitMinError> <LimitMode>1</LimitMode> </result> <channel>Server2</channel> <unit>Percent</unit> <float>1</float> <decimalMode>2</decimalMode> <value>100</value> <LimitMinWarning>80</LimitMinWarning> <LimitMinError>70</LimitMinError> <LimitMode>1</LimitMode> </result>
As you can see the <prtg> <result> and </prtg> are missing.
And the error message is "XML: Junk after document element </channel> -- JSON: The returned JSON does not match the expected structure (Invalid JSON.). (code: PE231)"
What would cause this?
BTW. This started to happen after the update to 21.2.68.1492. I had to recreate the Sensor on the working server because it had stop working and I repeated the same steps on the server that isn't working.