トップ回答者
PowerShellを使い、「SharePoint Online」 のリストを、『XML形式』でダウンロード(保存)する方法が分かりません。

質問
-
前提・実現したい事
---
SharePoint Online上にあるリストを、"XML形式"でダウンロード(保存)したいと考えております。
発生している問題・Error Message
---
ネットで調べてみましたが、自分の検索(探し方)が悪かったのか
「SharePoint から XML でダウンロードする方法」の記事が無かったです。(見つからなかった)
①開発経験も浅い為、PowerShellでどの様にコードを書けば良いのか分かりません。
②ネットにXML形式で保存方法が無かったので、「そもそも、SharePoint から XML形式で保存」が出来ない?
上記、2点が困っている所です。
もし分かる方がいれば、サンプルでも良いのでコードをご教示頂ければと思います。
よろしくお願い致します。。
実際のソースコード
---
・無し
試した事
---
・ネットで検索
↓検索ワード↓
「SharePoint XML ダウンロード」、「PowerShell XML ダウンロード」、「PowerShell XML 保存」、「SharePoint XML 保存」
「SharePoint PowerShell XML」・・・等
補足情報(言語/FW/ツール等のVersion)
---
・Windows 7
・IE、Google Chrome
・PowerShell Version 5.0
・SharePoint Online(Office365)- 編集済み mie.8 2017年6月20日 7:09 。
回答
-
こんにちは。
XMLのフォーマットについての言及がなかったので、とりあえずでサンプルを作ってみました。
PowerShellでは、XMLを書く簡単な方法はなさそうなので、XmlDocumentを使うのがよさそうです。$siteUrl = "https://example.sharepoint.com" $userName = "user@example.microsoftonline.com" $password = "p@ssw0rd" | ConvertTo-SecureString -Force -AsPlainText $listTitle = "List1" $clientContext = New-Object Microsoft.SharePoint.Client.ClientContext($siteUrl) $clientContext.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($userName, $password) $list = $clientContext.Web.Lists.GetByTitle($listTitle) $clientContext.Load($list) $clientContext.ExecuteQuery() $query = New-Object Microsoft.SharePoint.Client.CamlQuery $query.ViewXml = "<View><Query><OrderBy><FieldRef Name='ID'/></OrderBy></Query></View>" $items = $list.GetItems($query) $clientContext.Load($items) $clientContext.ExecuteQuery() $xmlDocument = New-Object System.Xml.XmlDocument $listElement = $xmlDocument.AppendChild($XmlDocument.CreateElement("List")) foreach ($item in $items) { $itemElement = $listElement.AppendChild($XmlDocument.CreateElement("Item")) foreach ($value in $item.FieldValues.GetEnumerator()) { $valueElement = $itemElement.AppendChild($XmlDocument.CreateElement($value.Key)) $valueElement.InnerText = $value.Value } } Write-Host $xmlDocument.OuterXml
(追記)
「リストを保存」というのがあいまいだったので、リストアイテムのデータの保存と解釈しました。
リストの設定を保存とかの意味でしたらごめんなさい。
- 編集済み Takashi ShinoharaMVP 2017年6月19日 3:03
- 回答の候補に設定 栗下 望Microsoft employee, Moderator 2017年6月20日 2:49
- 回答としてマーク mie.8 2017年6月21日 0:13
-
リストアイテムの検索にはCAMLを使っています。データベースにおけるSQLのようなものです。
CAML (Collaborative Application Markup Language) の概要
https://msdn.microsoft.com/ja-jp/library/ms426449.aspx先のサンプルでは何を指定していいかわからなかったのでIDでソートするようにしています。ここは要件によると思いますので、ご自身で決められるのがよいと思います。ちなみにID=48のデータを取得したい場合
<View><Query><Where><Eq><FieldRef Name='ID'/><Value Type='Number'>48</Value></Eq></Where></Query></View>
のようになります。
CreateElementについてはXMLの生成に関するメソッドです。
XmlDocument.CreateElement メソッド
https://msdn.microsoft.com/ja-jp/library/system.xml.xmldocument.createelement.aspxどのようなフォーマットのXMLがほしいのかがわからかったので、仮に以下のような感じのXMLを作成するイメージでした。
<List> <Item> <ID>48<ID> <Title>タイトル1</Title> ... </Item> ... </List>
- 回答の候補に設定 栗下 望Microsoft employee, Moderator 2017年6月20日 2:49
- 回答としてマーク mie.8 2017年6月21日 0:13
すべての返信
-
こんにちは。
XMLのフォーマットについての言及がなかったので、とりあえずでサンプルを作ってみました。
PowerShellでは、XMLを書く簡単な方法はなさそうなので、XmlDocumentを使うのがよさそうです。$siteUrl = "https://example.sharepoint.com" $userName = "user@example.microsoftonline.com" $password = "p@ssw0rd" | ConvertTo-SecureString -Force -AsPlainText $listTitle = "List1" $clientContext = New-Object Microsoft.SharePoint.Client.ClientContext($siteUrl) $clientContext.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($userName, $password) $list = $clientContext.Web.Lists.GetByTitle($listTitle) $clientContext.Load($list) $clientContext.ExecuteQuery() $query = New-Object Microsoft.SharePoint.Client.CamlQuery $query.ViewXml = "<View><Query><OrderBy><FieldRef Name='ID'/></OrderBy></Query></View>" $items = $list.GetItems($query) $clientContext.Load($items) $clientContext.ExecuteQuery() $xmlDocument = New-Object System.Xml.XmlDocument $listElement = $xmlDocument.AppendChild($XmlDocument.CreateElement("List")) foreach ($item in $items) { $itemElement = $listElement.AppendChild($XmlDocument.CreateElement("Item")) foreach ($value in $item.FieldValues.GetEnumerator()) { $valueElement = $itemElement.AppendChild($XmlDocument.CreateElement($value.Key)) $valueElement.InnerText = $value.Value } } Write-Host $xmlDocument.OuterXml
(追記)
「リストを保存」というのがあいまいだったので、リストアイテムのデータの保存と解釈しました。
リストの設定を保存とかの意味でしたらごめんなさい。
- 編集済み Takashi ShinoharaMVP 2017年6月19日 3:03
- 回答の候補に設定 栗下 望Microsoft employee, Moderator 2017年6月20日 2:49
- 回答としてマーク mie.8 2017年6月21日 0:13
-
すみません。
ご質問なのですが、
$query.ViewXml = "<View><Query><OrderBy><FieldRef Name = 'ID'/></OrderBy></Query></View>"
の「ID」部分は、アイテムのIDを指定すればよろしいでしょうか?
【例】
$query.ViewXml = "<View><Query><OrderBy><FieldRef Name = '48'/></OrderBy></Query></View>"また、
$listElement = $xmlDocument.AppendChild($XmlDocument.CreateElement("List"))$itemElement = $listElement.AppendChild($XmlDocument.CreateElement("Item"))の部分は、"List" と "Item" を何を指定すればよろしいでしょうか?
関数:CreateElement を調べましたが、「概要:指定の要素名の要素を生成します。」
と書いてあり分からず・・・
- 編集済み mie.8 2017年6月19日 6:29 .
-
リストアイテムの検索にはCAMLを使っています。データベースにおけるSQLのようなものです。
CAML (Collaborative Application Markup Language) の概要
https://msdn.microsoft.com/ja-jp/library/ms426449.aspx先のサンプルでは何を指定していいかわからなかったのでIDでソートするようにしています。ここは要件によると思いますので、ご自身で決められるのがよいと思います。ちなみにID=48のデータを取得したい場合
<View><Query><Where><Eq><FieldRef Name='ID'/><Value Type='Number'>48</Value></Eq></Where></Query></View>
のようになります。
CreateElementについてはXMLの生成に関するメソッドです。
XmlDocument.CreateElement メソッド
https://msdn.microsoft.com/ja-jp/library/system.xml.xmldocument.createelement.aspxどのようなフォーマットのXMLがほしいのかがわからかったので、仮に以下のような感じのXMLを作成するイメージでした。
<List> <Item> <ID>48<ID> <Title>タイトル1</Title> ... </Item> ... </List>
- 回答の候補に設定 栗下 望Microsoft employee, Moderator 2017年6月20日 2:49
- 回答としてマーク mie.8 2017年6月21日 0:13
-
アイテムの、「XML取得」が出来ました!
ありがとうございます。
色々と教えて頂き、ありがとうございます。
まだまだ開発経験が浅く、ネットで関数等を調べても解説を読んでも、分からない用語ばかりで進まず・・・
また、コードの書き方・記述方法も良く分からなかったので非常に助かりました。
頂いたコードの関数・処理を調べ、理解を深めたいと思います。
----
本来のやりたい事としては、
SharePoint上のリストをXML形式でローカルにダウンロード(保存)
↓
保存したXMLを使い、別サーバのSharePoint 上にリストを作成
を行いたいです。
XML についても、調べてみましたが、「拡張可能なマーク付け言語」としか覚えきれず・・・
>どのようなフォーマットのXMLがほしいのかがわからかったので、仮に以下のような感じのXMLを作成するイメージでした。
との事でしたが、XMLは、いくつかフォーマットがあるのでしょうか?
他サイトを見ると、書き出しが【<?xml version="1.0" encoding="Shift_JIS" ?>】
となっていたりするのですが、上記の様に、XMLを使いSharePoint上にリスト登録をする書き出しはご存知でしょうか?
よろしくお願い致します。