PowerShellでWebサービスを使う

手元でExcel管理している情報の一部を、SharePointのリストにして公開することにしました。Excelからリストにするのは一回であればいいですが、定期的に手動で更新なんてやってられない。先輩に相談したらSOAPを使って通信すればできるよ、と教えてもらい、PowerShellを使って自動更新することにしました。

New-WebServiceProxyコマンドレッドを使うと、Webサービスと通信するオブジェクトを作ることができます。
SharePointの場合だとhttp://[サイトのURL]/_vti_bin/Lists.asmx?WSDLとしてやることで、SharePointリストをマネージするWebサービスの仕様がXML形式で返ってきます。

このURIを指定してオブジェクトを作ると、Get-MemberでWebサービスのメソッドが得られます。こんな感じ。

メソッド一覧をみると、UpdateListItemsメソッドを使えばできそうです。更新対象のList IDがわかっているのであれば、Update用のXMLを作って引数にすればいいそうな。

Listの5項目をID指定して更新するXMLのサンプル($Title,$sno,$name,$dev,$useの5項目をUpdate)

出来上がったXMLの文字列をPowerShell上のXMLオブジェクトにするのは、[XML]でキャストするだけ。楽ちん

UpdateListItemsの引数はXMLnodeオブジェクトである必要があるらしいので、$XMLオブジェクトの中の更新部分のnodeを指定します。(SelectNodeメソッドを使うと、Nodelistオブジェクトに格納されてしまうようです。)

データの更新をしたいので、キー項目を使って、GetListItemsメソッドを使ってList Itemを取ってきてList IDを取得します。

 

今回もとのデータはExcelなので、Excelからデータを読み出す方法は過去に記事を書いたのでこちらを参考→
PowerShellからExcelを使う

Excelのシートを$Sheetオブジェクトに入れて、Do文で一行ずつ処理するようにしたのがこちら。

 

SOAPは昔はExcel VBAでも直接通信できたけど、ツールの更新自体をMicrosoftがやめてしまったそうな。
.netに注力していくって事なんでしょうね。

参考 new-webserviceproxy

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください