PowerShellからSOAP経由でSAP情報取得

PowerShellを利用してSOAP形式で公開されたWebServiceから情報を取得する例です。
今回はSAPシステムからワークプロセステーブルの情報を取得しています。


#SAP接続先を設定
$saphost='sap.hostname.com'
$instanceNo='00'

#WebServiceのURLを指定
$url = 'http://{0}:5{1}13/SAPControl.cgi' -F $saphost,$instanceNo

#SOAPのエンベロープの中身を設定
$soap = @'
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:SAPControl">
   <soapenv:Header/>
   <soapenv:Body>
      <urn:ABAPGetWPTable/>
   </soapenv:Body>
</soapenv:Envelope>
'@

#WebService向けにSOAPエンベロープをPOSTリクエストで送る
[xml]$wf = Invoke-WebRequest $url -UseDefaultCredentials -Method post -ContentType "text/xml" -Body $soap

#レスポンスとして受け取ったSOAPエンベロープから取得したい内容を抽出
[xml]$resxml = $wf.Envelope.Body.ABAPGetWPTableResponse.InnerXml
$resxml.workprocess.Item | Out-GridView
pause

実行すると以下のような感じでSAPのワークプロセス情報が表示されます。


SOAPエンベロープの内容はWSDLの情報と、soapUIで調べるとわかります。

soapUI プロジェクト日本語トップページ - SourceForge.JP