none
PowerShell を使い、SharePoint Online上のリストの『列名』を取得したい。

    質問

  • PowerShellを使用し、SharePoint Online(Office365)上のリストに登録されている

    「列名」を取得したいと考えております。

    途中までコードは書けたのですが、この先が思い付きません。。

    【途中までのコード】

    # .NET CSOM モジュールの読み込み
    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client")         | Out-Null
    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.Runtime") | Out-Null
    
    # 変数宣言
    $siteUrl         = "対象サイト"
    $accountName     = "アカウントID"
    $passWord        = ConvertTo-SecureString -AsPlainText -Force "パスワード"
    $listName        = "対象リスト"
    
    # ログイン情報取得
    $ctx             = New-Object Microsoft.SharePoint.Client.ClientContext($siteUrl)
    $credentials     = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($accountName, $passWord)
    $ctx.Credentials = $credentials
    
    # リストを取得
    $list            = $ctx.Web.Lists.GetByTitle($listName)
    $listInfo        = $list.Fields

    ここまでで、恐らく対象のリスト情報は取得出来ていると思うのですが・・・

    そのリストの列名を取得する書き方分からず困っております。

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



    • 編集済み mie.8 2017年6月23日 3:31
    2017年6月23日 0:18

回答

  • こんにちは。

    こんな感じではどうでしょうか。

    # リストを取得
    $list            = $ctx.Web.Lists.GetByTitle($listName)
    $listInfo        = $list.Fields
    
    $ctx.Load($listInfo)
    $ctx.ExecuteQuery()
    
    foreach ($field in $listInfo) {
        Write-Host $field.Title         # こっちがタイトル
        Write-Host $field.InternalName  # こっちが内部名
    }
    

    • 回答としてマーク mie.8 2017年6月23日 4:40
    2017年6月23日 4:27
  • SharePointのリストは内部用にいくつかの列をあらかじめ持っています。
    ある程度はFromBaseTypeを見れば絞り込めますが、完全には難しいようですね…

    • 回答としてマーク mie.8 2017年6月23日 9:17
    2017年6月23日 8:31

すべての返信

  • こんにちは。

    こんな感じではどうでしょうか。

    # リストを取得
    $list            = $ctx.Web.Lists.GetByTitle($listName)
    $listInfo        = $list.Fields
    
    $ctx.Load($listInfo)
    $ctx.ExecuteQuery()
    
    foreach ($field in $listInfo) {
        Write-Host $field.Title         # こっちがタイトル
        Write-Host $field.InternalName  # こっちが内部名
    }
    

    • 回答としてマーク mie.8 2017年6月23日 4:40
    2017年6月23日 4:27
  • ご回答ありがとうございます。

    上記コードで列名が取得出来ました。

    1つ不明点があるので、もしお分かりなら教えて下さい。

    ----

    リスト名が「test」。

    「testリスト」の列名が、『"Subject","Name","From"』の3つあるとします。

    教えて頂いたコードを追加し、実行すると『"Subject","Name","From"』が取得出来るのですが、

    他の列名も多数コンソール上に表示されてしまいます。

    【コンソール上に表示される列名の一部】

    コンテンツ タイプの ID
    ContentTypeId
    タイトル
    Title
    承認者のコメント
    _ModerationComments
    ファイルの種類
    File_x0020_Type

    件名  -----------→ここから列名

    Subject

    名前

    Name

    出身

    From  -----------→列名取得終了

    コンテンツ タイプ
    ContentType
    更新日時
    Modified
    登録日時
    Created
    登録者
    Author
    更新者
    Editor
    コピー先の有無
    _HasCopyDestinations
    コピー元
    _CopySource

    ・・・

    と表示されてしまいます。

    太字の部分が欲しい列名。

    その他は不必要な列名です。

    この列名は、登録していないのに何故、コンソール上に表示されるんでしょうか?

    申し訳ございませんが、よろしくお願い致します。

    2017年6月23日 5:41
  • SharePointのリストは内部用にいくつかの列をあらかじめ持っています。
    ある程度はFromBaseTypeを見れば絞り込めますが、完全には難しいようですね…

    • 回答としてマーク mie.8 2017年6月23日 9:17
    2017年6月23日 8:31
  • そうなんですね。

    教えて頂きありがとうございます。

    全データ配列に格納し、そこから対象列名だけを取得する様にコードを書き

    欲しい列名のみ取得する事が出来ました。

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

    2017年6月23日 9:13