Https befehl in Batch einbauen
Hallo,
Ich starte per Batch eine Updateroutine. Nun möchte ich dort noch einbauen, dass das PRTG Monitoring für den entsprechenden Server pausiert wird, sobald das Scipt startet.
Die Anfrage an PRTG lautet:
Wenn ich den Befehl im Browser ausführe, bekomme ich eine leere Webseite als Antwort und das Monitoring für den entprechenden Server ist daraufhin pausiert.
Nun möchte ich diesen Befehl per Batch ausführen, ohne das irgendein Browserfenster geöffnet wird. evtl noch eine kurze Echomeldung, dass das Monitoring pausiert wird.
Ich hab es bereits mit curl versucht, aber da passiert nichts. Auch bekomme ich bei einigen Servern die Meldung, dass der Webseite nicht vertraut wir. Diese Meldung muss natürlich auch ignoriert werden.
Hat da jemand evtl. eine Idee?
Ich starte per Batch eine Updateroutine. Nun möchte ich dort noch einbauen, dass das PRTG Monitoring für den entsprechenden Server pausiert wird, sobald das Scipt startet.
Die Anfrage an PRTG lautet:
https://yourserver/api/pause.htm?id=yourid&pausemsg=Update&action=0&username=yourusername&passhash=yourpasshash
Wenn ich den Befehl im Browser ausführe, bekomme ich eine leere Webseite als Antwort und das Monitoring für den entprechenden Server ist daraufhin pausiert.
Nun möchte ich diesen Befehl per Batch ausführen, ohne das irgendein Browserfenster geöffnet wird. evtl noch eine kurze Echomeldung, dass das Monitoring pausiert wird.
Ich hab es bereits mit curl versucht, aber da passiert nichts. Auch bekomme ich bei einigen Servern die Meldung, dass der Webseite nicht vertraut wir. Diese Meldung muss natürlich auch ignoriert werden.
Hat da jemand evtl. eine Idee?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 3134158418
Url: https://administrator.de/contentid/3134158418
Ausgedruckt am: 25.11.2024 um 04:11 Uhr
5 Kommentare
Neuester Kommentar
In der Batch als PS
oder cURL
usw.
Beide oben ignorieren fehlerhafte Zertifikate, ich würde aber dringend dazu raten gültoge Zertifikate zu deployen wenn man schon Zugangsdaten über die URL übermittelt.
Grüße Uwe
@echo off
powershell -EP Bypass -C "[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}; [System.Net.WebClient]::new().DownloadString('https://yourserver/api/pause.htm?id=yourid&pausemsg=Update&action=0&username=yourusername&passhash=yourpasshash')"
curl -skL 'https://yourserver/api/pause.htm?id=yourid&pausemsg=Update&action=0&username=yourusername&passhash=yourpasshash'
Beide oben ignorieren fehlerhafte Zertifikate, ich würde aber dringend dazu raten gültoge Zertifikate zu deployen wenn man schon Zugangsdaten über die URL übermittelt.
Ich hab es bereits mit curl versucht, aber da passiert nichts. Auch bekomme ich bei einigen Servern die Meldung, dass der Webseite nicht vertraut wir. Diese Meldung muss natürlich auch ignoriert werden.
Dann hast du vermutlich den Parameter -k oder auch -L (follow redirects) vergessen.Grüße Uwe
Also "nichts" ist unwahrscheinlich, curl sollte die den HTTP Antwort Code oder eine Fehlermeldung zurückgeben
Hier mal ein Beispiel für unify Telefone in dem das Telefon neugestartet wird. Hab ebenfalls auch Scripte für das setzen von Zeitserver etc. beim CP200.
Der 1. Teil sollte dein SSL Probelm lösen. Die Telefone sind primäar auch über 443 ansprechbar. Ohne Zertifikate rennt man schnell in Fehler. Du kannst den 1. Block so für PS übernehmen.
Wenn es im Browser geht, nutze doch mal Netzwerkanalyse von Firefox ("F12") drücken. Da werden GET und POST mitgeschnitten. Lassen sich auch wiederholen.
Falls du was vergessen hast, sollte es nun deutlich werden.
APIv2: https://www.paessler.com/support/prtg/api/v2/overview
API: https://www.paessler.com/manuals/prtg/http_api
Beim Telefon versteckt sich ein Token im Formular.
Finde für die APIv2 bei Paessler etwas ähnliches.
Das Bearer Token ist ja auf der Seite beschrieben. Auch wie man dann damit den Header aufbaut.
Die Version 1 ist natürlich einfacher. Wenn es aber schon eine v2 gibt, wird mit Sicherheit die alte API irgendmal sterben. Ggf. keine schlechte Idee jetzt schon mit v2 anzufangen?!? Bei den unify Telefonen ist es, wie du siehst, genauso. Lohnt sich also das mit zu berücksichtigen.
Frage mich auch: curl oder nicht curl? Es gibt auch einen Alias für den PowerShell Befehl. Ich habe es immer bevorzugt die "echte" curl.exe herunterzuladen - cygwin o.ä.
Oder eben gleich mit Invoke-WebRequest zu arbeiten. in deinen Fall - da auch Paessler PS Beispiele hat - sollte dass das Mittel der Wahl sein.
Der 1. Teil sollte dein SSL Probelm lösen. Die Telefone sind primäar auch über 443 ansprechbar. Ohne Zertifikate rennt man schnell in Fehler. Du kannst den 1. Block so für PS übernehmen.
add-type @"
using System.Net;
using System.Security.Cryptography.X509Certificates;
public class TrustAllCertsPolicy : ICertificatePolicy {
public bool CheckValidationResult(
ServicePoint srvPoint, X509Certificate certificate,
WebRequest request, int certificateProblem) {
return true;
}
}
"@
[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
Wenn es im Browser geht, nutze doch mal Netzwerkanalyse von Firefox ("F12") drücken. Da werden GET und POST mitgeschnitten. Lassen sich auch wiederholen.
Falls du was vergessen hast, sollte es nun deutlich werden.
APIv2: https://www.paessler.com/support/prtg/api/v2/overview
API: https://www.paessler.com/manuals/prtg/http_api
Beim Telefon versteckt sich ein Token im Formular.
$(($LoginXML.Forms).Fields['page_ident'])
Finde für die APIv2 bei Paessler etwas ähnliches.
Das Bearer Token ist ja auf der Seite beschrieben. Auch wie man dann damit den Header aufbaut.
Die Version 1 ist natürlich einfacher. Wenn es aber schon eine v2 gibt, wird mit Sicherheit die alte API irgendmal sterben. Ggf. keine schlechte Idee jetzt schon mit v2 anzufangen?!? Bei den unify Telefonen ist es, wie du siehst, genauso. Lohnt sich also das mit zu berücksichtigen.
Frage mich auch: curl oder nicht curl? Es gibt auch einen Alias für den PowerShell Befehl. Ich habe es immer bevorzugt die "echte" curl.exe herunterzuladen - cygwin o.ä.
Oder eben gleich mit Invoke-WebRequest zu arbeiten. in deinen Fall - da auch Paessler PS Beispiele hat - sollte dass das Mittel der Wahl sein.
Function RestartPhone ($PhoneIP) {
# Phone Anmeldung
[string]$Phoneuser = "admin"
[string]$Phonepwd = "123456"
[string]$Phoneurl = "https://$PhoneIP/page.cmd"
[string]$LoginPOST = "page_submit=WEBMp_Admin_Login&lang=en&page_ident=abcdefij12345678&AdminPassword=123456"
[string]$RestartPhone = "lang=en&user=Admin&menu=00000100000000000001_99&highlighted=WEBM_Admin_Restart&page=WEBM_Admin_Restart"
[string]$RestartPhoneSet1 = "page_submit=WEBM_Admin_Restart&lang=en&page_ident="
$LoginXML = Invoke-WebRequest $Phoneurl -Method Post -Body $LoginPOST -SessionVariable session -TimeoutSec 2
if ($LoginXML) {
$LoginXML = Invoke-WebRequest $Phoneurl -Method Post -Body $($RestartPhone) -WebSession $session
$LoginXML = Invoke-WebRequest $Phoneurl -Method Post -Body "$RestartPhoneSet1$(($LoginXML.Forms).Fields['page_ident'])" -WebSession $session
}
}
# $FLphones = @("192.168.1.1","192.168.1.2","192.168.1.3","192.168.1.4","192.168.1.5","192.168.1.6","192.168.1.7","192.168.1.8","192.168.1.9")
ForEach($ip in $FLphones) {
$ping = test-connection -comp $ip -count 1 -Quiet
if ($ping) {
RestartPhone $ip
Write-Host $ip
}
}