PowerShell サンプル – 列の作成、取得、編集、削除

こんにちは、SharePoint サポートの佐伯です。
今回の投稿では、PowerShell を使用して列の基本的な操作を実施する方法についてご紹介します。
あまり PowerShell のご経験がない方にも分かりやすくするために、ここではシンプルなサンプルをご紹介していきます。目的の処理を実装する際にご参考になりましたら幸いです。
実装の際は MSDN の資料も合わせてご参照ください。

 

■列の作成

#サイトを取得します。
$web = Get-SPWeb <Web サイトの URL>
#リストを取得します
$list = $web.Lists["<リスト名>"]
#列のコレクションを取得します。
$fields = $list.Fields
#列を追加します。
$fields.Add("<列名>", <列の種類>, <必須列か否か>)

 

例) 1 行テキスト列を追加する
$web = Get-SPWeb https://sharepoint/sites/team $list = $web.Lists["ニュース"]
$fields = $list.Fields
$fields.Add("メモ", [Microsoft.SharePoint.SPFieldType]::Text, $false)

 
例) 日付と時刻列を追加する
$web = Get-SPWeb https://sharepoint/sites/team $list = $web.Lists["会議資料"]
$fields = $list.Fields
$fields.Add("開催日", [Microsoft.SharePoint.SPFieldType]::DateTime, $true)
 
参考 : その他の <列の種類> は下記の資料をご参照ください。
SPFieldType enumeration
https://msdn.microsoft.com/ja-jp/library/microsoft.sharepoint.spfieldtype(v=office.15).aspx

 

#サイトを取得します。
$web = Get-SPWeb <Web サイトの URL>
#リストを取得します
$list = $web.Lists["<リスト名>"]
#列のコレクションを取得します。
$fields = $list.Fields
#文字列のコレクションを作成します。
$strings = New-Object System.Collections.Specialized.StringCollection
$strings.Add("<選択肢1>")
$strings.Add("<選択肢2>")
$strings.Add("<選択肢3>")
#列を追加します。
$fields.Add("<列名>", <列の種類>, <必須列か否か>, <フィールド名の8文字制限>, $strings)

 

例) 選択肢列を追加する
$web = Get-SPWeb https://sharepoint/sites/team $list = $web.Lists["ドキュメント"]
$fields = $list.Fields
$strings = New-Object System.Collections.Specialized.StringCollection
$strings.Add("議事録")
$strings.Add("社内通知")
$strings.Add("調査書")
$strings.Add("その他")
$fields.Add("DocumentCategory", [Microsoft.SharePoint.SPFieldType]::Choice, $false, $false, $strings)

 

#サイトを取得します。
$web = Get-SPWeb <Web サイトの URL>
#リストを取得します
$list = $web.Lists["<リスト名>"]
#列のコレクションを取得します。
$fields = $list.Fields
#参照先のリストの ID を取得します。
$refListId = $web.Lists["<参照先のリスト名>"].ID
#列を追加します。
$fName = $fields.AddLookup("<列名>", $refListId, <必須列か否か>)
#追加した列を取得します。
$field = $list.Fields.GetField($fName)
#参照する列を設定します。
$field.LookupField = "<参照する列の内部名>"
#列を更新します。
$field.Update()

 

例) 参照列を追加する
$web = Get-SPWeb https://sharepoint/sites/team $list = $web.Lists["会議記録"]
$fields = $list.Fields
$refListId = $web.Lists["施設リスト"].ID
$fName = $fields.AddLookup("施設", $refListId, $false)
$field = $list.Fields.GetField($fName)
$field.LookupField = "Title"
$field.Update()

 

■列の取得

#サイトを取得します。
$web = Get-SPWeb <Web サイトの URL>
#リストを取得します
$list = $web.Lists["<リスト名>"]
#列のコレクションを取得します。
$fields = $list.Fields
#列を取得します。
$field = $fields.GetField("<列のタイトルまたは内部名>")
#列のプロパティ値を取得します
$field.<列のプロパティ>

 

例) 列の内部名を取得する
$web = Get-SPWeb https://sharepoint/sites/team
$list = $web.Lists["ニュース"]
$fields = $list.Fields
$field = $fields.GetField("メモ")
$field.InternalName

参考 : その他の <列のプロパティ> は下記の資料をご参照ください。
SPField properties
https://msdn.microsoft.com/ja-jp/library/microsoft.sharepoint.spfield_properties(v=office.15).aspx
例) 列のプロパティ情報を *.txt ファイルに出力する
$web = Get-SPWeb https://sharepoint/sites/team
$list = $web.Lists["ニュース"]
$fields = $list.Fields
$field = $fields.GetField("メモ")
$field >C:\news.txt

 

■列の編集

#サイトを取得します。
$web = Get-SPWeb <Web サイトの URL>
#リストを取得します
$list = $web.Lists["<リスト名>"]
#列のコレクションを取得します。
$fields = $list.Fields
#列を取得します。
$field = $fields.GetField("<列名または列の内部名>")
#列のプロパティに値を設定します。
$field.<列のプロパティ> = <変更後のプロパティ値>
#列を更新します。
$field.Update()

 

例) 列のタイトルを変更する
$web = Get-SPWeb https://sharepoint/sites/team
$list = $web.Lists["ドキュメント"]
$fields = $list.Fields
$field = $fields.GetField("DocumentCategory")
$field.Title= "文書のカテゴリ"
$field.Update()

参考 : その他の <列のプロパティ> は下記の資料をご参照ください。
SPField properties
https://msdn.microsoft.com/ja-jp/library/microsoft.sharepoint.spfield_properties(v=office.15).aspx

 

■列の削除

#サイトを取得します。
$web = Get-SPWeb <Web サイトの URL>
#リストを取得します
$list = $web.Lists["<リスト名>"]
#列のコレクションを取得します。
$fields = $list.Fields
#列を取得します。
$field = $fields.GetField("<列のタイトルまたは内部名>")
#列を削除します。
$field.Delete()

 
例) 列を削除する
$web = Get-SPWeb https://sharepoint/sites/team
$list = $web.Lists["ニュース"]
$fields = $list.Fields
$field = $fields.GetField("メモ")
$field.Delete()

 

- 補足
目的の処理を実施した後は、SPWeb.Dispose メソッドを使用して SPWeb オブジェクトを閉じ、リソースを解放します。

$web.Dispose()

 

例) 日付と時刻列を追加し、既定値を今日の日付に設定する
$web = Get-SPWeb https://sharepoint/sites/team
$list = $web.Lists["ニュース"]
$fields = $list.Fields
$fName = $fields.Add("投稿日", [Microsoft.SharePoint.SPFieldType]::DateTime, $false)
$field = $list.Fields.GetField($fName)
$field.DisplayFormat = [Microsoft.SharePoint.SPDateTimeFieldFormatType]::DateOnly
$field.DefaultValue = "[today]" $field.Update()
$web.Dispose()