Powershell: Maskierung und Auflösung
Hallo,
ich habe das Problem das ich mit der Maskierung und Auflösung einer Variablen nicht weiter komme.
Mein Befehl funktioniert in der Direkteingabe ohne Probleme.
Den Wert den ich übergeben will, kommt aus einem Array $Name
Aber egal wie ich es anstelle, die Gegenseite wirft einen Fehler aus.
In meiner Not bin dann zum bauen von Zeichenketten übergegangen.
Das funktioniert. Aber das kann ja eigentlich nicht die Lösung sein....
Hat vielleicht jemand die zündente Idee?
Gruß, Schnerpf
ich habe das Problem das ich mit der Maskierung und Auflösung einer Variablen nicht weiter komme.
Mein Befehl funktioniert in der Direkteingabe ohne Probleme.
--data '{ \"name\":\"Tom\" }'
Den Wert den ich übergeben will, kommt aus einem Array $Name
Aber egal wie ich es anstelle, die Gegenseite wirft einen Fehler aus.
In meiner Not bin dann zum bauen von Zeichenketten übergegangen.
--data '{ $z"name"$z : $z"$($Name[$i])"$z }'
Das funktioniert. Aber das kann ja eigentlich nicht die Lösung sein....
Hat vielleicht jemand die zündente Idee?
Gruß, Schnerpf
Please also mark the comments that contributed to the solution of the article
Content-Key: 7838173280
Url: https://administrator.de/contentid/7838173280
Printed on: December 4, 2023 at 10:12 o'clock
10 Comments
Latest comment
Hi,
Ich verstehe nur Bahnhof. Kannst du bitte vorne anfangen mit erklären?
Du kannst nicht einfach ein zerknülltes Stück Papier mit ein paar Schnipsel hier rein werfen und erwarten, dass irgendjemand weiß was du willst.
Ich verstehe nur Bahnhof. Kannst du bitte vorne anfangen mit erklären?
- was willst du genau machen?
- wo gibst du was ein?
- was ist denn die Gegenstelle?
- wie lautet die Fehlermeldung?
- das Array beinhaltet was?
- ist es ein String-Array?
- ein Array mit Object die weitere Properties enthalten?
- was soll denn das --Data Ding sein? Ein Argument für die Commandline?
Du kannst nicht einfach ein zerknülltes Stück Papier mit ein paar Schnipsel hier rein werfen und erwarten, dass irgendjemand weiß was du willst.
OH man....
Rate mal willst Webservice konsumieren o.ä.? Also nahand des Formats JSON?
https://www.windowspro.de/script/json-powershell-erzeugen-bearbeiten
https://www.thecodebuzz.com/making-powershell-post-request-with-body-jso ...
Ist das die Richtung?
Rate mal willst Webservice konsumieren o.ä.? Also nahand des Formats JSON?
https://www.windowspro.de/script/json-powershell-erzeugen-bearbeiten
https://www.thecodebuzz.com/making-powershell-post-request-with-body-jso ...
Ist das die Richtung?
Zitat von @Schnerpf:
Ok ich war vielleicht zu schüchtern. Hier die ganze Zeile
Nach JSON musste erstmal googeln. Ja das soll es werden. Das war die Ausgangssituation. Das funktioniert nicht.
Ok ich war vielleicht zu schüchtern. Hier die ganze Zeile
curl.exe -ik --request PUT --header $Cookie --header "Content-type: application/json" --data '{ \"name\":\"$($Name[0])\" }' https://localhost:8443/umsapi/v3/clients/$id
Nach JSON musste erstmal googeln. Ja das soll es werden. Das war die Ausgangssituation. Das funktioniert nicht.
Na die Zeile ist nicht so wichtig. Wichtiger wäre dem Publikum die Frage strukturiert und verständlich aufzubereiten. Ich bin bestimmt nicht der einzige der wenig Lust hat, sich die Details zur Frage, die der Fragesteller weg gelassen hat, selbst aus dem Fingern zu saugen.
Dazu gibt es auch eine FAQ:
Wie Du eine Frage richtig stellst

Wieso überhaupt curl wenn Powershell POST Requests doch nativ beherrscht ...? 😬
Zeppel
p.s. Zum Thema Maskieren: innerhalb von Hochkommas findet keine Variablen Expandierung statt ...
Anführungszeichen kann man entweder mit dem Backtick (`) innerhalb von Anführungszeichen einbauen, oder man verdoppelt die Anführungszeichen.
Wichtig für die Variablen-Expandierung ist aber das es ganz außen normale Anführungszeichen sind und keine Hochkommata.
Aber Powershell kennt hier ja bessere Methoden wie oben gezeigt ganz einfach das Umwandeln von Hashtables in JSON, dann braucht ma hier keine Stringwurst erstellen sondern kann ganz normal mit Objekten arbeiten.
Ergibt automatisch das gewünschte 
$body = @{'name'=$Name[0]} | ConvertTo-JSON
Invoke-RestMethod -Uri "https://localhost:8443/umsapi/v3/clients/$id " -Method Put -ContentType "application/json" -Body $body
p.s. Zum Thema Maskieren: innerhalb von Hochkommas findet keine Variablen Expandierung statt ...
--data "{ `"name`":`"$($Name[0])*`"}"
Wichtig für die Variablen-Expandierung ist aber das es ganz außen normale Anführungszeichen sind und keine Hochkommata.
Aber Powershell kennt hier ja bessere Methoden wie oben gezeigt ganz einfach das Umwandeln von Hashtables in JSON, dann braucht ma hier keine Stringwurst erstellen sondern kann ganz normal mit Objekten arbeiten.
$body = @{name='Blablub'} | ConvertTo-JSON
{
"name": "BlaBlub"
}
Hallo, genau sowas dachte ich mir schon!
Früher hat man mal curl extra installiert. Dann war es ein Alias. Command Line und Powershell unterscheiden sich da. Kenne das, darum kam mir auch der Escape mit \ bekannt vor.!
Invoke-Webrequest oder Invoke-Restmehod: https://www.cloudsma.com/2018/05/invoke-restmethod-vs-invoke-webrequest/
Ansonsten in JSON oder von JSON konvertieren. Gibt genug Anleitungen. Würde also "curl" und die Sequenz oben aufgeben und es komplett in PS schreiben Da PS Objekte unterstützt, kannst du auch viele Datenquellen anzapfen und das in JSON umwandeln lassen und abschicken.
Man kann auch in PS Strings so formatieren, dass sie nicht interpretiert werden. Es wie unter "DOS" aussieht. Macht aber im Jahr 2023 alles keinen Sinn. Würde dir raten nach den beiden Befehlen oben zu schauen und wie man in JSON umwandelt.
mfg Crusher
Früher hat man mal curl extra installiert. Dann war es ein Alias. Command Line und Powershell unterscheiden sich da. Kenne das, darum kam mir auch der Escape mit \ bekannt vor.!
Invoke-Webrequest oder Invoke-Restmehod: https://www.cloudsma.com/2018/05/invoke-restmethod-vs-invoke-webrequest/
Ansonsten in JSON oder von JSON konvertieren. Gibt genug Anleitungen. Würde also "curl" und die Sequenz oben aufgeben und es komplett in PS schreiben Da PS Objekte unterstützt, kannst du auch viele Datenquellen anzapfen und das in JSON umwandeln lassen und abschicken.
Man kann auch in PS Strings so formatieren, dass sie nicht interpretiert werden. Es wie unter "DOS" aussieht. Macht aber im Jahr 2023 alles keinen Sinn. Würde dir raten nach den beiden Befehlen oben zu schauen und wie man in JSON umwandelt.
mfg Crusher

Wenn's das dann war als gelöst markieren bitte nicht vergessen.