marcimarc85
Goto Top

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:

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?

Content-ID: 3134158418

Url: https://administrator.de/contentid/3134158418

Ausgedruckt am: 25.11.2024 um 04:11 Uhr

Lochkartenstanzer
Lochkartenstanzer 21.06.2022 aktualisiert um 14:22:59 Uhr
Goto Top
Moin,

elinks, llynx, curl oder wget mit dieser url als Argument ausführen.

lks
MrCount
MrCount 21.06.2022 um 14:34:17 Uhr
Goto Top
Servus,

versuchs mal mit Powershell und invoke-webrequest
colinardo
Lösung colinardo 21.06.2022 aktualisiert um 14:52:45 Uhr
Goto Top
In der Batch als PS
@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')"  
oder cURL
curl -skL 'https://yourserver/api/pause.htm?id=yourid&pausemsg=Update&action=0&username=yourusername&passhash=yourpasshash'  
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.

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
NetzwerkDude
NetzwerkDude 21.06.2022 um 14:44:17 Uhr
Goto Top
Zitat von @MarciMarc85:
Ich hab es bereits mit curl versucht, aber da passiert nichts.

Also "nichts" ist unwahrscheinlich, curl sollte die den HTTP Antwort Code oder eine Fehlermeldung zurückgeben
Crusher79
Crusher79 21.06.2022 aktualisiert um 21:04:16 Uhr
Goto Top
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.


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
}


}