REST-API Check_MK Powershell

Hallo zusammen,

ich möchte mit Hilfe von Powershell Hosts anlegen. Dazu habe ich folgendes Script erstellt.
Allerdings bekomme ich die Fehlermeldung: Invoke-RestMethod : {“title”: “Content type ‘application/x-www-form-urlencoded’ not supported on this endpoint.”, “status”: 415}
Was muss ich ändern, dass ich einen Host anlegen kann?

$HOST_NAME= “name.de
$SITE_NAME= “site”
$API_URL= “https://$HOST_NAME/$SITE_NAME/check_mk/api/1.0/domain-types/host_config/collections/all”

$USERNAME= “automation”
$PASSWORD= “secret”

$Headers = @{
‘Accept’ = ‘application/json’
‘Authorization’ = “Bearer $USERNAME $PASSWORD”
}

Invoke-RestMethod -Method Post -Uri $API_URL -Headers $Headers -Body folder=‘TEST’:hostname=‘myserver1234’:ipadress=‘192.168.0.123’

Hast du versucht folgende Sachen anzuhängen:

-Body ($params|ConvertTo-Json) -ContentType "application/json"

Also in deinem Fall dann:

Invoke-RestMethod -Method Post -Uri $API_URL -Headers $Headers -Body (folder=‘TEST’:hostname=‘myserver1234’:ipadress=‘192.168.0.123’|ConvertTo-Json) -ContentType "application/json"

Dabei kommt dann folgende Fehlermeldung

folder=TEST:hostname=myserver1234:ipadress=192.168.0.123 : Die Benennung “folder=TEST:hostname=myserver1234:ipadress=192.168.0.123” 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.

Wichtige Korrektur Unten

Ah, hatte da zwei Kleinigkeiten Übersehen.
ConvertTo-Json erlaubt “;” als trenner, aber nicht “:” und man muss das ganze natürlich noch verpacken.
Versuch es so noch einmal:

Invoke-RestMethod -Method Post -Uri $API_URL -Headers $Headers -Body (@{folder=‘TEST’;hostname=‘myserver1234’;ipadress=‘192.168.0.123’}|ConvertTo-Json) -ContentType "application/json"

Korrektur
Ich habe mir jetzt mal deinen gesamten Aufruf angesehen und in dem Request Body sind noch einige Fehler.
Daher habe ich mir mal die Freiheit genommen und das ganze korrigiert und gleich in ein Json verpackt:

$BODY='{"folder": "/TEST", "host_name": "myserver1234", "attributes": {"ipaddress": "192.168.0.123"}}'

Damit lässt sich das Ganze dann wie folgt aufrufen:

Invoke-RestMethod -Method Post -Uri $API_URL -Headers $Headers -Body $BODY -ContentType "application/json"

Bitte beachte, dass dafür der Ordner “TEST” bereits existieren muss.
Ich würde auch empfehlen, dass du dir die API Hilfen in check_mk etwas genauer ansiehst. Sie kannst du bei deinem eigenen Server unter folgenden Adressen erreichen:
https://$HOST_NAME/$SITE_NAME/check_mk/openapi/
https://$HOST_NAME/$SITE_NAME/check_mk/api/v0/ui/#/

Danke für deine Hilfe, so hat es jetzt funktioniert:

$body = "
{
"folder“:"~test”,
"host_name“:"myserver1234”,
"attributes“:{"ipaddress”:"192.168.0.42","labels":"agent:no_agent"}
}

Invoke-RestMethod -Method Post -Uri $API_URL -Headers $Headers -Body $body

Jetzt stellt sich mir die nächste Frage: Wie gebe ich die eigen erstellten Labels an?

This topic was automatically closed 365 days after the last reply. New replies are no longer allowed. Contact @fayepal if you think this should be re-opened.