【Microsoft 365】Sharepoint List の列の内部名を一括で確認する方法

Microsoft365

以前、内部名や ID を確認する方法を記事にまとめましたが、ひとつずつ調べる方法でした。設計時に内部名を控えておらず、その方法では調べるのが面倒でしたので、PowerShell でまとめて調べるスクリプトを作成しました。

ひとつずつ調べる方法は以下の記事を参考ください。

概要

Share Point Online に PowerShell で CSOM(クライアント側オブジェクト モデル) を使用してアクセスし、指定したリストの列名(内部名)をまとめて取得する方法です。

私しか使用しない前提のため、スクリプト内にアカウント情報を記入しています。
複数人での利用や配布をする予定であれば、パスワードファイルを読み込むような方法にするか、その都度アカウント情報を入力するようにしてください。

また、Microsoft 365 の管理者権限でなくても、Sharepoint サイトに対して権限を持つアカウントで実行できます。

パスワードファイルを利用する方法については、以下の記事をご参考ください。

環境

私の実行環境は以下になります。

  • Windows 11 pro
  • PowerShell 5.1.22000.653
  • SharePoint Online
  • SharePoint Online Client Component SDK

事前準備

実行する環境に SharePoint Online Client Component SDK のインストールが必要です。
セットアップファイルは以下のサイトからダウンロードできます。
※64 bit と 32 bit でファイルが異なるため、間違わないように注意ください。

Download SharePoint Online Client Components SDK from Official Microsoft Download Center
The SharePoint Online Client Components SDK can be used to enable development with SharePoint Online. Notice that we do ...

サンプルコード

# Load SDK
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client") | Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.Runtime") | Out-Null

#config variables
$SiteURL = "https://hogehoge.sharepoint.com/sites/test_site"
$ListName ="テストリスト"

# Microsoft 365 account
$account = "hoge1@hogehoge.co.jp"
$password = ConvertTo-SecureString "hogehogehoge" -AsPlainText -Force

# Create credential 
$credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials ($account, $password)

#Setup the context
$Context = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
$Context.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($credential.Username, $credential.Password)
          
#Get the List and field
$List = $Context.Web.Lists.GetByTitle($ListName)
$Context.Load($List)
$Fields = $list.Fields
$Context.Load($Fields)
$Context.ExecuteQuery()

foreach ($Field in $Fields){

    Write-Host $Field.Title','$Field.InternalName
}

詳細

SharePoint Online Client Component SDK を読み込みます。

# Load SDK
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client") | Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.Runtime") | Out-Null

取得したい列が存在する、サイトのURLとリスト名を変数に設定します。

#config variables
$SiteURL = "https://hogehoge.sharepoint.com/sites/test_site"
$ListName ="テストリスト"

使用するアカウント情報を設定しています。
パスワードについてはプレーンテキストを利用すると警告が表示されるため、セキュリティで保護されたテキストに変換しています。その際 -AsPlainText -Force オプションは必ず指定します。

# Microsoft 365 account
$account = "hoge1@hogehoge.co.jp"
$password = ConvertTo-SecureString "hogehogehoge" -AsPlainText -Force

PSCredential で資格情報を作成します。

$credential = New-Object System.Management.Automation.PSCredential ($account, $password)

ClientContext インスタンスを作成します。

#Setup the context
$Context = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
$Context.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($credential.Username, $credential.Password)

GetByTitle($ListName)で目的のリストを取得します。ここでは内部名や ID ではなく、タイトル名で取得しています。

クライアント側オブジェクトでプロパティにアクセスするためには、ClientContextオブジェクトのLoad()メソッドとExecuteQuery()メソッドを呼び出す必要がありますので、以下の部分で$List$Fieldsに対して行っています。

値プロパティを使用する前に Load と ExecuteQuery を呼び出す

読み込んだ後は、foreach で回しながら列名(Title)と内部名(InternalName)を表示しています。

#Get the List and field
$List = $Context.Web.Lists.GetByTitle($ListName)
$Context.Load($List)
$Fields = $list.Fields
$Context.Load($Fields)
$Context.ExecuteQuery()

foreach ($Field in $Fields){

    Write-Host $Field.Title','$Field.InternalName
}

おすすめ書籍

ひと目でわかるMicrosoft 365 SharePoint運用管理編

数少ないモダン UI を中心とした書籍です。
基本的なことから他ツールのとの連携まで画像や例付きで紹介されていますので、まずはこの一冊を読むことをおすすめします。

ひと目でわかるOffice 365ビジネス活用28の事例 SharePoint Server 2016対応版

クラシック UI 時代には重宝した一冊です。
モダン UI に関する情報が少ないため、直接活用できるものではありませんが、SharePoint で何ができるかを知るにはいいと思います。

おわりに

Sharepoint List の列の内部名を一括で確認する方法でした。

設計時に内部名を控えていなかったりしたときに、まとめて内部名を確認できるため非常に便利です。

Excel から PowerQuery を利用して一覧を作成する方法もあるようですが、スクリプトで作成しておくと手順も少なく瞬時に一覧を取得できますので、こちらの方法を私はよく利用しています。

タイトルとURLをコピーしました