none
SharePoint 上のアイテムを、PowerShellを使用し「.XML」で取得するが、中身が1行。タブを入れ見やすくしたい。 RRS feed

  • 質問

  • # .NET CSOM モジュールの読み込み
    [Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.SPFieldType")
    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client" )        | Out-Null
    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.Runtime") | Out-Null
    
    # -- 【変数宣言】SharePoint --
    $siteUrl    = "対象URL"
    $userName   = "アカウント名"
    $password   = "パスワード" | ConvertTo-SecureString -Force -AsPlainText
    $listTitle  = "対象リスト名"
    
    <# XMLファイル保存場所指定 #>
    $savePath   = "保存先パス\SAVE.xml"
    
    # ログイン情報取得
    $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
    $items          = $list.GetItems($query)
    $clientContext.Load($items)
    $clientContext.ExecuteQuery()
    
    # XML読み込み
    $xmlDocument    = New-Object System.Xml.XmlDocument
    $listElement    = $xmlDocument.AppendChild($XmlDocument.CreateElement("List"))
    
    # XML情報取得
    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
        }
    }
    
    # XMLファイル出力
    $xmlDocument.OuterXml | Out-File $savePath

    上記ソースコードで、SharePoint Online 上の対象アイテムを、「XMLファイル」でローカルに保存が出来るのですが

    保存されたXMLファイルを確認すると、1行になっていて見づらいです。

    そこで、「保存する際にタブ等を入れ、体裁を整えてファイルを保存」

    or

    「保存したXMLファイルを読み込み、タブを追加して"上書き" or "別名保存"」がしたいのですが

    やり方(ソースの書き方)や、関数が分からず困っております。

    どなたか分かる方がいれば、ご教示頂ければと思います。

    よろしくお願い致します。

    2017年6月22日 8:48

回答

  • $xmlDocument.OuterXml | Out-File $savePath

    の代わりに、

    $xmlDocument.Save($savePath)

    を実行するのではいかがでしょうか。

    • 回答としてマーク mie.8 2017年6月22日 9:42
    2017年6月22日 9:31
    モデレータ

すべての返信

  • $xmlDocument.OuterXml | Out-File $savePath

    の代わりに、

    $xmlDocument.Save($savePath)

    を実行するのではいかがでしょうか。

    • 回答としてマーク mie.8 2017年6月22日 9:42
    2017年6月22日 9:31
    モデレータ
  • ご回答ありがとうございます。

    「XML編集」や「タブ」にばかり気を取られておりました。

    $xmlDocument.Save($savePath)

    で実行し、無事タブ入りで保存が出来ました。

    保存方法を変えるだけでも、動作が違うんですね。

    ありがとうございました。

    2017年6月22日 9:42