Jump to content

Invoke-WebRequest Post mit Variablen


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo zusammen,

 

wir verwalten alle unsere Server in einer zentralen Datenbank, in RackTables.

 

Da wir unsere VMs per PS Skript ausrollen, wollte ich die Erstellung eines neuen DB-Eintrages in das Ausroll-Skript einfügen.

 

Leider scheitere ich gerade bei der Übergabe der im Skript verwendeten Variablen.

 

Also mit Strings geht es:


cls
$apiUser="be28f0a29e7df3b9a455871abdb25d2a"
$apiPass="a8b15299dbbc374a05c7b8068001b634"
$res="http://serverdoku.*****.local:9292/object"

 

$apiHash = ConvertTo-SecureString $apiPass -AsPlainText -Force
$apiCred = New-Object Management.Automation.PSCredential ($apiUser, $apiHash)

 

$data='{"name":"Test-Server","type":"VM","label":"TEST","attributes":{"Ansprechpartner":"Admin","ESX-Cluster":"Standard","CPU-Anzahl":"8","Betriebssystem":"Windows%GPASS%Server 2012 R2 64-Bit","ServiceRequest":"REQ-2018-12345","KST":"911 (RZ-Infrastruktur)"}}'

try {
Invoke-WebRequest -Uri $res -Credential $apiCred -Method Post -Body $data -ContentType "application/json" -TimeoutSec 10
}
catch  {}

 

Jetzt würde ich gerne Servernamen etc. durch Variablen ersetzen.


Sprich:


$data='{"name":"$servername","type":"VM","label":"$funktion","attributes":{"Ansprechpartner":"$verantwortlicher","ESX-Cluster":"Standard","CPU-Anzahl":"8","Betriebssystem":"$os,"ServiceRequest":"REQ-$jahr-$request","KST":"$kst)"}}'

 

Da ich auf dem Gebit noch keine Ahnung habe, weiß ich jetzt nicht genau, wo die " weg können etc. Die Variablen werden so nämlich nicht erkannt.

 

 

Vielen Dank schon einmal :-)

Link zu diesem Kommentar

Das ist auch kein JSON mehr. :smile: Mein Beispiel war vielleicht etwas zu spartanisch. So habe ich es eigentlich gemeint (mit geschweiften Klammern):

$data="{""name"":""$servername"",""type"":""VM"",""label"":""$funktion"",""attributes"":{""Ansprechpartner"":""$verantwortlicher"",""ESX-Cluster"":""Standard"",""CPU-Anzahl"":""8"",""Betriebssystem"":""$os,""ServiceRequest"":""REQ-$jahr-$request"",""KST"":""$kst)""}}"

 

Link zu diesem Kommentar

Da Variablen werden korrekt expandiert. Du hast aber hinten eine schliessende Klammer zu viel. Wenn es auch nach Korrektur nicht geht, solltest Du mal schauen, was der Server sagt, also

$req = Invoke-WebRequest ...
$req.Content

(oder allenfalls $req.RawContent)

 

Falls das Problem nicht die PowerShell ist, sondern die Anfragen anders zusammengestellt werden müssen, kann https://www.getpostman.com/ helfen. Damit kann man solche Requests zusammenstellen, abschicken und die Antwort lesen. Ist zum Debuggen etwas komfortabler als direkt mit der PowerShell.

Link zu diesem Kommentar
vor 14 Minuten schrieb mwiederkehr:

Da Variablen werden korrekt expandiert. Du hast aber hinten eine schliessende Klammer zu viel. Wenn es auch nach Korrektur nicht geht, solltest Du mal schauen, was der Server sagt, also


$req = Invoke-WebRequest ...
$req.Content

(oder allenfalls $req.RawContent)

 

Falls das Problem nicht die PowerShell ist, sondern die Anfragen anders zusammengestellt werden müssen, kann https://www.getpostman.com/ helfen. Damit kann man solche Requests zusammenstellen, abschicken und die Antwort lesen. Ist zum Debuggen etwas komfortabler als direkt mit der PowerShell.

Habe die Klammer entfernt... Zack ist der Eintrag da. Dann werde ich jetzt mal versuchen alle vorhandenen Infos in die Datenbank zu schreiben.

Vielen Dank bis hier her

Link zu diesem Kommentar

Aktueller Stand:

 

Habe zum Test versucht das erste Attribut zu posten. Leider ohne erfolgt:


$data="{""name"":""$servername"",""type"":""VM"",""label"":""$funktion"",""attributes"":{""Ansprechparnter"":""$verntwortlicher""}}"

 

Ausgabe in der ISE


StatusCode        : 200
StatusDescription : OK
Content           : {}
RawContent        : HTTP/1.1 200 OK
                    Connection: Keep-Alive
                    Content-Length: 0
                    Date: Tue, 23 Jan 2018 09:08:03 GMT
                    Server: WEBrick/1.3.1 (Ruby/2.1.6/2015-04-13)
                    
                    
Headers           : {[Connection, Keep-Alive], [Content-Length, 0], [Date, Tue, 23 Jan 2018 09:08:03 GMT], [Server, WEBrick/1.3.1 (Ruby/2.1.6/2015-04-13)]}
RawContentLength  : 0

Link zu diesem Kommentar

Dann wird das Problem bei RackTables liegen, bzw. die Ansteuerung ist falsch. Kann man Attribute setzen, indem man ein neues Objekt schickt? Oder muss man das Objekt zuerst erstellen (was ja funktioniert hat) und die Attribute dann separat setzen, mit der ID des Objekts als Parameter? Kenne RackTables nicht, aber bei einer Datenbank macht man ja auch erst ein INSERT und Änderungen dann über die ID, nicht indem man den ganzen Datensatz noch einmal schickt.

Link zu diesem Kommentar

Um das ganze übersichtlichere und dadurch auch fehlerfreier zu gestallten, würde ich es so lösen:

 

$objJson = New-Object -TypeName PsCustomObject -ArgumentList @{
    name = $servername
    type = "VM"
    label = $funktion
    attributes = New-Object -TypeName PsCustomObject -ArgumentList @{ Ansprechparnter = $verntwortlicher }
 }

$strJsonRequest = $objJson | ConvertTo-Json -Compress
$ServerUri = "www.blabla.de"
 
Invoke-WebRequest -Method Post -Uri $ServerUri -Body $strJsonRequest

 

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...