Powershell invoke-webrequest avec xml enveloppe soap corps contenant £ char erreurs
Je suis en train d'utiliser Powershells Invoke-Webrequest d'envoyer une enveloppe soap à un mot de passe protégé de service web. Le mot de passe contient le '£' char, qui est à l'origine de l'erreur suivante:
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>
C'est le script (information sensible supprimé):
[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
Il ne semble pas d'importance ce type de/encodage, j'vigueur le $SAVON de, Appelez-Webrequest insiste sur l'interprétation de la '£' comme un '�'.
Des idées?
Est votre fichier de script lui-même unicode ou utf-8?
Son être générées à la volée par un agent (pas écrit par moi) - mais si je prends la sortie et le coller dans ISE j'ai le même problème, donc quel que soit l'encodage ISE sur Windows 2012 R2 (PS 4.0) la valeur par défaut je suppose.
Son être générées à la volée par un agent (pas écrit par moi) - mais si je prends la sortie et le coller dans ISE j'ai le même problème, donc quel que soit l'encodage ISE sur Windows 2012 R2 (PS 4.0) la valeur par défaut je suppose.
OriginalL'auteur ItsNotMyStrongPoint | 2015-04-08
Vous devez vous connecter pour publier un commentaire.
Il ressemble certainement un problème de codage, alors voici quelques choses que vous pouvez essayer.
Assurez-vous que votre fichier est enregistré en UTF-8. Utilisation notepad.exe pour l'ouvrir, puis sélectionnez Enregistrer Sous. En bas il y a un "Codage" liste déroulante. Il faut dire UTF-8. Sinon, le modifier et remplacer le fichier.
Dans Powershell imprimer le fichier à l'aide de la
type
ouget-content
de commande. Le signe de la livre devrait être affiché comme un dièse, non pas comme un point d'interrogation.De l'enregistrer à l'aide du bloc-notes (ou un autre éditeur) dans l'encodage correct devrait corriger cet.
Une autre chose qui pourrait fonctionner est de stocker le message SOAP dans un fichier séparé codé en UTF-8 (Unicode).
Ensuite de récupérer le contenu du fichier à l'aide
Get-Content
en utilisant le paramètre d'Encodage et le type que vous avez enregistré avec.Encore une fois, c'est-à-assurez-vous que le signe de la livre n'est pas de déformation avant qu'il est utilisé dans l'appel de service.
Si cela ne fonctionne pas, peut-être que vous pouvez obtenir le mot de passe à l'aide de
Read-Host
et de combiner le message SOAP en utilisant cela.Dernier, vous pouvez toujours changer le mot de passe de sorte qu'il n'a aucun des caractères de l'unicode gamme. Vous pouvez toujours utiliser un tas de caractères spéciaux, tant qu'ils sont dans le bas de la plage ASCII. E. g. %=+-)ç!"# etc.
Mais c'est un dernier recours, je suppose.
Je sais que c'était il y a longtemps, mais la question est de montrer que sans réponse, il en sera de répondre, de manière satisfaisante. Comme le script a été généré à la volée par un processus qui a remplacé la substitution {{variables}} avec le texte, il était impossible de savoir ce que le codage a été. J'ai fini de tricher et d'obtenir le mot de passe changé, de sorte qu'il n'avait pas l' £ signe.
OriginalL'auteur jurgenb