Ich bekomme beim PRTGScheduler (https://github.com/PRTG/PRTGScheduler) Custom Sensor den Fehler "XML: The returned XML does not match the expected schema. (code: PE233) -- JSON: The returned JSON does not match the expected structure (#O2). (code: PE231)"

Ich habe die Anleitung auf Github (https://github.com/PRTG/PRTGScheduler/wiki/1.-Installation) befolgt. Bei einigen Sachen bin ich mir noch nicht so sicher. Ich habe die neuste PHP 7.2.3 (x64) Thread Safe heruntergeladen und auf dem Server auf welchem die Probe ist unter "C:\PHP" entpackt. Die "php.ini-production" Datei habe ich zu "php-ini" umbennant und "extension=intl" und "extension=openssl" auskommentiert. Danach habe ich den inhalt des PRTGScheduler Archives unter "C:\PHP\app" entpackt. Im "C:\PHP\app" Ordner gibt es keinen unterordner. Der Inhalt des PRTScheduler Archives ist direkt im "C:\PHP\app" Ordner. Danach habe ich im PRTG Web-Interface wie in der Anleitung den neuen Benutzer erstellt und unter "C:\PHP\app\application\config\application.php" die einzelnen Parameter angepasst. Danach habe ich das "PRTG-Scheduler.ps1" skript in "\PRTG Network Monitor\Custom Sensors\EXEML" Verzeichnis kopiert. Schlussendlich habe ich noch im PRTG Web-Interface auf der Local Probe noch einen neuen "Custom Sensor" "EXE/Script Advanced" mit dem erstellt und habe dort das "PRTG-Scheduler.ps1" Skript ausgewählt.


Article Comments

Hallo,

Bitte aktivieren Sie die Option "EXE-Ergebnis auf Festplatte schreiben" in den Einstellungen des Sensors und posten Sie die Protokolldateien (Result of Sensor XXX.Data.txt and Result of Sensor XXX.txt) die auf der entsprechenden Probe unter "C:\ProgramData\Paessler\PRTG Network Monitor\Logs (Sensors)" zu finden sind.

Best regards.


Mar, 2018 - Permalink

Die Datei Result of Sensor 14373.txt ist leer. Der inhalt der andere ist:

Data['blockedsens'].asString := '';
Data['canlinux'].asString := '0';
Data['channelinfos'].asString := '{}';
Data['channelnames'].asString := '';
Data['environment'].asString := '';
Data['exefile'].asString := 'PRTG-Scheduler.ps1';
Data['exeparams'].asString := '';
Data['fastcount'].asString := '0';
Data['host'].asString := '127.0.0.1';
Data['hostv6'].asString := '::1';
Data['inerror'].asString := '1';
Data['ipversion'].asString := '0';
Data['isexesensor'].asString := '1';
Data['lastmsg'].asString := '#Y2 @#O233 @#O231[#O2]';
Data['lastuptime'].asString := '0';
Data['linuxlogindomain'].asString := '';
Data['linuxloginpassword'].asString := '***';
Data['monitorchange'].asString := '';
Data['mutexname'].asString := '';
Data['notonpod'].asString := '0';
Data['reboot'].asString := '43171.3129002894';
Data['reqmsginterval'].asString := '60';
Data['resultfile'].asString := 'Result of Sensor 14373.txt';
Data['sensorid'].asString := '14373';
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 := '0';
Data['windowslogindomain'].asString := 'censored';
Data['windowsloginpassword'].asString := '***';
Data['windowsloginusername'].asString := 'censored';
Data['writeresult'].asString := '2';

Mar, 2018 - Permalink

Hi there,

Please activate the "Use Windows Credentials of Parent Device" in the sensor settings and check if the sensor works properly now.

Best regards.


Mar, 2018 - Permalink

Es funktioniert immer noch nicht. Zum Testen habe ich nochmals einen neuen Sensor mit den richtigen Einstellungen von anfang an erstellt und nochmals die SensorID unter /PHP/app/application/config/application.php angepasst. Zudem habe ich noch einen Testversuch gestartet in dem ich unter /PHP/app/application/config/application.php als Protokoll http anstelle von https und den Port 80 anstelle von 443 verwendet. Dies hat leider auch nicht funktioniert.


Mar, 2018 - Permalink

Hallo,

Was passiert oder welchen Output erhalten Sie wenn Sie den Sensor manuell via PowerShell ausführen?

Best regards.


Mar, 2018 - Permalink

Sobald ich den Sensor im PowerShell ISE ausführe bekomme ich keinen Fehler oder eine sonstige ausgabe. Das Skript wird ausgeführt und danach wieder gestoppt. Zum Testen habe ich noch den PHP Pfad geändert und das Skript hat sofort ausgerufen das der PHP Pfad falsch ist.


Mar, 2018 - Permalink

Hallo,

Benennen Sie bitte einmal den "app"-Ordner unter "C:\PHP\" um und starten Sie das Script erneut manuell? Wird diesmal wieder ein Fehler gezeigt?

Bitte prüfen Sie auch dass unter "C:\PHP\app\" im Ordner die "index.php" zu finden ist.

Best regards


Mar, 2018 - Permalink

Hallo,

Sobald ich den "app" Ordner umbennant und das Skript manuell laufen gelassen habe, hat die Konsole keine Fehler angezeigt. Zum Testen habe ich noch eine zusätzliche "Test-Path" funktion hinzugefügt. Jetzt zeigt es mir nach dem umbennenen dein gleichen Fehler an wie als ich den "PHP" Ordner umbenannt habe. Des weiteren habe ich ich Skript unter "$pinfo.Arguments" den "app" Pfad und unter "$pinfo.FileName" den "php.exe" Pfad ebenfalls manuell eingegeben.

Die "index.php" Datei ist im "C:\PHP\app\" Ordner. Dies wird ebenfalls mit der neuen "Test-Path" funktion getestet.

Des weiteren habe ich gesehen, dass im Skript unter der Funktion "This-AddMenuEntry" ein Pfad zur "\scripts_custom.js" Datei ist. Diese Datei ist allerdings leer. Der Pfad zur Datei stimmt.

Muss das Skript (PRTG-Scheduler.ps1) auch im "app" Ordner sein?

Das ganze habe ich noch mit verschiedenen Versionen von PHP 7.2.3 und 7.1.15 getestet.

  • PHP VC15 ThreadSafe
  • PHP VC15 NonThreadSafe
  • PHP VC15 ThreadSafe x86
  • PHP VC15 NonThreadSafe x86
  • PHP VC14 ThreadSafe
  • PHP VC14 NonThreadSafe
  • PHP VC14 ThreadSafe x86
  • PHP VC14 NonThreadSafe x86

Nach dem welchseln der PHP Version habe ich immer folgenden Sensor OutPut im PRTG Network Monitor bekommen.

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)

Dazu habe ich noch die "application.php" Datei unter "C:\PHP\app\application\config" beigefügt, falls dort fehler bei der Konfiguration passiert sind. Was mir allerdings an dieser Datei noch aufgefallen ist, ist das die Datei nicht mit "?>" geschlossen worden ist.

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

$config['app_version']        = "1.0";

$config['prtg_protocol']      = "https";
$config['prtg_server']        = "10.20.1.9";
$config['prtg_port']          = 443;
$config['prtg_sensorid']      = 14374;

# /!\ IMPORTANT /!\ #
# make sure that this user account has its timezone set to UTC!
$config['prtg_username']      = "prtgscheduler";
$config['prtg_passhash']      = <removed>;
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

$config['default_timezone']   = "Europe/Zurich";
$config['weekstart']          = "MO";
$config['preferred_language'] = "en";
$config['debug']              = False;

# This decides if the maintenance windows should only be set at least within 5 minutes before they actually start.
# If set to false, the scheduler will set the upcoming maintenances right away, rendering PRTGs internal option to
# set maintenance windows practically useless - setting maintenances via PRTG will result in overwriting the automatic one.
$config['set_on_demand']        = True;
$config['on_demand_threshold']  = 5;

?>

Mar, 2018 - Permalink