Communiquer powershell et webservice Soap. Démo avancée pratique

soap via powershell

 

L'objet est de consommer les webservices (soap ou autre) depuis powershell.

Cette première démo fait le focus sur un webservice soap simple afin de présenter facilement les notions liées.

Considérons ce webservice dont le wsdl est localisé à cette adresse: http://www.dneonline.com/calculator.asmx?wsdl

Il offre un simple calculateur. La seule méthode qui nous intéresse est la méthode Add.

Pour interroger ce webservice, nous utilisons Invoke-WebRequest de powershell.

 

cmdlet Invoke-WebRequest (iwr)

La commande get-help iwr affiche ceci:

NOM

Invoke-WebRequest

RÉSUMÉ

   Gets content from a web page on the Internet.

SYNTAXE

   Invoke-WebRequest [-Uri] <Uri> [-Body <Object>] [-Certificate <X509Certificate>] [-CertificateThumbprint <String>] [-ContentType <String>] [-Credential <PSCredential>]

   [-DisableKeepAlive] [-Headers <IDictionary>] [-InFile <String>] [-MaximumRedirection <Int32>] [-Method <WebRequestMethod> {Default | Get | Head | Post | Put | Delete |

   Trace | Options | Merge | Patch}] [-OutFile <String>] [-PassThru] [-Proxy <Uri>] [-ProxyCredential <PSCredential>] [-ProxyUseDefaultCredentials] [-SessionVariable

   <String>] [-TimeoutSec <Int32>] [-TransferEncoding <String> {chunked | compress | deflate | gzip | identity}] [-UseBasicParsing] [-UseDefaultCredentials] [-UserAgent

   <String>] [-WebSession <WebRequestSession>] [<CommonParameters>]

........

Whaoooo!!!!

 

Pour notre démo pratique, nous utilisons cette forme:

 


iwr $url -InFile $inFile -ContentType 'text/xml' -Method Post -OutFile $outFile

Vous l'avez certainement deviné, $url doit être valorisé avec http://www.dneonline.com/calculator.asmx?wsdl

Requête xml soap

Le paramètre $inFile est un fichier qui doit contenir la requête xml et dans notre cas c'est :


<x:Envelope xmlns:x="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/">

 <x:Header />

 <x:Body>

    <tem:Add><tem:intA>10</tem:intA>

<tem:intB>90</tem:intB> </tem:Add>

 </x:Body>

</x:Envelope>

 

Enfin, le dernier paramètre $outFile est le fichier qui va contenir la réponse du webservice soap.

Script powershell

Voilà nous avons tous les ingrédients pour écrire notre premier script powershell saop.ps1 comme suit:

 

 

$url= "http://www.dneonline.com/calculator.asmx?wsdl"

$inFile="$Env:temp\addSoap.xml"

$outFile="$Env:temp\respSoap.xml"

iwr $url -InFile $inFile -ContentType 'text/xml' -Method Post -OutFile $outFile

[xml]$resp = gc $outFile

[int]$somme = $resp.Envelope.Body.AddResponse.AddResult

Write-Host "Resultat soap ",$somme -ForegroundColor Green

 

Quelques explications avant de lancer le script:

  • un fichier nommé addSoap.xml doit être dans le répertoire temp de l'utilisateur win et aussi doit contenir la requête soap donnée ci-dessus.
  • la réponse du webservice sera générée dans le fichier respSoap.xml dans le même répertoire temp.
  • La dernière partie du script récupère le contenu du fichier respSoap.xml avec la cmdlet get-content (gc) et ensuite parse le xml pour extraire la valeur de AddResult retournée par le webservice soap. C'est tout:-)

Exécuter script powershell

L'exécution du script soap.ps1 affiche ceci (en vert)

Resultat soap 100

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *