none
PowerShellでExport-csvを使用する際 RRS feed

  • 質問

  • PowerShell でSharePoint上の情報をExport-Csvにより出力する際に一部の項目が

    System.Collections.Generic.List`1[System.String]

    と表記されて情報が出せずに困っています。

    Get-SPOUser |Export-csv "保存するcsvのパス" 

    の他に、何か付け足さなければいけないのでしょうか?

    2016年3月30日 8:25

回答

  • Export-Csvコマンドレットというか、CSVフォーマットは、オブジェクトの階層構造を基本的には表現できません。

    なので、Get-SPOUserの返すオブジェクトの持つプロパティのうち、階層構造を持つものがあれば、それをそのままCSVに書き出すことはできないので、階層構造の展開処理を入れてやる必要があると思います。

    方法としてはいくつかあると思いますが、例えば、

    Get-SPOUser | Select-Object プロパティ1,プロパティ2,@{Label="プロパティ3";Expression={$_.プロパティ3 -join ","}}|Export-csv "保存するcsvのパス"

    のような書き方ができるかと思います。
    (プロパティ3の値を展開する場合)

    なお、このように手動で展開処理を入れた場合、出力されたCSVから元のオブジェクト構造を再現するには、やはり手動での結合処理が必要になります。

    もしくは、

    Get-SPOUser | ConvertTo-Json | Set-Content "jsonのパス"のように、

    CSVではなく、オブジェクトの階層構造を表現できるJSON形式で保存する方法もあるかと思います。


    2016年3月30日 9:10
    モデレータ

すべての返信

  • Export-Csvコマンドレットというか、CSVフォーマットは、オブジェクトの階層構造を基本的には表現できません。

    なので、Get-SPOUserの返すオブジェクトの持つプロパティのうち、階層構造を持つものがあれば、それをそのままCSVに書き出すことはできないので、階層構造の展開処理を入れてやる必要があると思います。

    方法としてはいくつかあると思いますが、例えば、

    Get-SPOUser | Select-Object プロパティ1,プロパティ2,@{Label="プロパティ3";Expression={$_.プロパティ3 -join ","}}|Export-csv "保存するcsvのパス"

    のような書き方ができるかと思います。
    (プロパティ3の値を展開する場合)

    なお、このように手動で展開処理を入れた場合、出力されたCSVから元のオブジェクト構造を再現するには、やはり手動での結合処理が必要になります。

    もしくは、

    Get-SPOUser | ConvertTo-Json | Set-Content "jsonのパス"のように、

    CSVではなく、オブジェクトの階層構造を表現できるJSON形式で保存する方法もあるかと思います。


    2016年3月30日 9:10
    モデレータ
  • 無事に解決出来ました。ありがとうございました!

    2016年3月31日 8:06