Powershell-invoke-webrequest mit xml soap-envelope-body mit £ char Fehler
Ich versuche, Powershells Invoke-Webrequest senden einer soap-envelope zu einem Kennwort-geschützten web-service. Das Passwort enthält '£' char, was ist, verursacht den folgenden Fehler:
Invoke-WebRequest ...The formatter threw an exception while trying to deserialize the message: There was an error while trying to deserialize parameter http://tempuri.org/:password. The InnerException message was 'There was an error deserializing the object of type System.String. '�inthemiddle' contains invalid UTF8 bytes.'. Please see InnerException for more details.</faultstring></s:Fault></s:Body></s:Envelope>
Dies ist das Skript (sensible Informationen entfernt):
[xml]$SOAP = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/">
<soapenv:Header/>
<soapenv:Body>
<tem:MethodName>
<tem:password>passwordtextwit£inthemiddle</tem:password>
</tem:MethodName>
</soapenv:Body>
</soapenv:Envelope>'
$headers = @{"SOAPAction" = "http://tempuri.org/service/MethodName"}
$URI = "https://<MY URI.com>/service.svc"
$out = Invoke-WebRequest $uri -Method post -ContentType 'text/xml' -Body $SOAP -Headers $headers
Es scheint nicht zu Rolle, welche Art/encoding Kraft, die $SOAP, Invoke-Webrequest besteht auf die Interpretation der '£' als '�'.
Irgendwelche Ideen?
Ist die script-Datei selbst, unicode oder utf-8 kodiert?
Seine generiert on-the-fly durch einen bevollmächtigten (nicht von mir geschrieben) - aber wenn ich mir die Ausgabe und das einfügen in ISE ich habe das gleiche problem, so was auch immer Codierung ISE auf Windows 2012 R2 (PS 4.0) standardmäßig an, denke ich.
Seine generiert on-the-fly durch einen bevollmächtigten (nicht von mir geschrieben) - aber wenn ich mir die Ausgabe und das einfügen in ISE ich habe das gleiche problem, so was auch immer Codierung ISE auf Windows 2012 R2 (PS 4.0) standardmäßig an, denke ich.
InformationsquelleAutor ItsNotMyStrongPoint | 2015-04-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es sieht sicherlich wie ein encoding-Problem, so dass hier ein paar Dinge, die Sie ausprobieren können.
Stellen Sie sicher, dass Ihre Datei ist als UTF-8 gespeichert. Verwenden notepad.exe um es zu öffnen, und wählen Sie Speichern Als. An der Unterseite gibt es eine "Codierung" dropdown-Menü. Es sollte sagen, UTF-8. Wenn nicht, ändere Sie und überschreibe die Datei.
In der Powershell drucken Sie die Datei mit der
type
oderget-content
Befehl. Das Pfund-Zeichen sollte angezeigt werden als Pfund-Zeichen, nicht wie ein Fragezeichen.Sparen Sie mit notepad (oder anderen editor) in der richtigen Codierung sollte dieses Problem beheben.
Andere Sache, die funktionieren könnte, ist die Speicherung der SOAP-Nachricht in einer separaten Datei als UTF-8 kodiert (oder Unicode).
Dann bekommen Sie den Inhalt der Datei, die mit
Get-Content
mit den-Encoding-parameter und der Typ, den Sie es gespeichert haben.Wieder, dies ist, um sicherzustellen, dass das Pfund-Zeichen ist nicht entstellt werden, bevor es verwendet wird in der service-Aufruf.
Wenn das nicht funktioniert, vielleicht können Sie das Passwort mithilfe
Read-Host
und kombinieren Sie die SOAP-Meldung mit, dass.Letzte, Sie können immer ändern Sie das Kennwort so, es hat keine Zeichen in den unicode-Bereich. Sie können immer noch eine Reihe von besonderen Zeichen, solange Sie in der unteren ASCII-Bereich. E. g. %=+-)ç!"# etc.
Aber das ist ein letzter Ausweg, denke ich.
Ich erkennen, das war eine lange Zeit her, aber die Frage ist, zu zeigen, wie unbeantwortet, so beantwortet werden, unbefriedigend. Wie wurde das Skript generiert on-the-fly durch einen Prozess, der ersetzt die substitution {{Variablen}} mit dem text, es war unmöglich, herauszufinden, was die Codierung wurde. Ich endete, Betrug und bekommen das Passwort geändert, damit es nicht über das £ - Zeichen.
InformationsquelleAutor jurgenb