PowerShellでリストに列を追加する

SharePoint

今回はPowerShellを使ってSharePointOnlineのリストに列を追加する手順について紹介していきます(∩´∀`)∩

事前準備

PowerShellのスクリプトを実行する際に必要なSDK等がありますので、その辺のインストール等がまだの方は↓の記事を参考に準備しておいてください(∩´∀`)∩

SharePoint Online Client Component SDK というヤツを使います。

PowerShellからSharePointOnlineを操作する為の準備
今回はPowerShellからSharePoint Onlineを操作するための下準備について説明してみます。 PowerShellによる操作 まずSharePoint OnlineをPowerShellで操作するには2つの方法が用意されて...



リストの取得

接続等行った状態から説明していきます。その辺は記事末尾のサンプルコード内には書いておきますので、そちらも参考にしていただけたらと。

今回は以前作成した ほげほげ(hogehoge)というリストに列を追加します。

で、まずはリストを取得します。

# リスト取得
$list = $Context.Web.Lists.GetByTitle("ほげほげ")

# リストIDが分かっている場合、GetByIdでもOK
# $list = $Context.Web.Lists.GetById("IDの文字列")

GetByTitle か GetByID でリストを取得します。タイトルを使う時は内部名でも表示名でもどちらでもOKです。今回は表示名です。

IDで取得する場合は下記記事の方法などを使うか、PowerShellでなんやかやするなどしてIDを取得しておきます。

SharePointOnlineでリストのIDを取得する
監査ログを見るときや、プログラムからなんやかんやする時に必要になったりするリストID。今回はその取得方法というか、確認方法について簡単に説明してきます~(∩´∀`)∩

列情報のXMLを記述

次に追加したい列の情報・設定をXMLで記述し、変数に格納します。

# 追加する列の情報をXMLで記述
$col = "<Field Type='Counter' DisplayName='Counter' Name='Counter' />"

Type(列の種類)や表示名、内部名などを指定します。上のサンプル以外の項目は下記ページ参照。

FieldCollection.SchemaXml property (Microsoft.SharePoint.Client)

また Type は以下の物があります。大体は英語名でどの型か判別できるかと思いますが、一部よくわからないヤツありますね。。GUIから選択できないヤツなんかもあるっぽいです。

Integer
Text
Note
DateTime
Counter
Choice
Lookup
Boolean
Number
Currency
Url
Computed
Threading
GUID
MultiChoice
GridChoice
Calculated
File
Attachments
User
Recurrence
CrossProjectLink
ModStat

この辺の詳細はMS-WSSFO2というドキュメントに記載されていますので、細かく知りたい方はそちらも読んでみてください。

[MS-WSSFO2]: Windows SharePoint Services (WSS): File Operations Database Communications Version 2 Protocol
Specifies the Windows SharePoint Services (WSS): File Operations Database Communications Version 2 Protocol. This protocol provides communication

列情報の追加

リストオブジェクトへ先ほど作成したXMLを元に列を追加します。

# リストオブジェクトのフィールドにXMLの情報を追加
$list.Fields.AddFieldAsXml($col,$true,[Microsoft.SharePoint.Client.AddFieldOptions]::AddFieldToDefaultView)

1つ目の引数が列情報のXML、2つ目の引数がデフォルトのビューへ追加するorしない、3つ目がオプションです。

3つ目のオプションは下記ページ参照。

AddFieldOptions enumeration (Microsoft.SharePoint.Client)

更新とか後始末

最後に更新や後始末をして完了です。

# リストオブジェクト更新
$list.Update()

# 上記の更新を実行
$Context.ExecuteQuery()

# 後始末
$Context.Dispose()

サンプルコード

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client") | Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.Runtime") | Out-Null
 
#接続情報等
$SiteUrl = "https://xxxxx.sharepoint.com/testsite" 
$Account = "	administrator@xxxx.onmicrosoft.com" 
$Password = Read-Host -Prompt "Enter Password." -AsSecureString
 
# Credential作成
$Credential = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Account, $Password) 
 
# Context作成
$Context = New-Object Microsoft.SharePoint.Client.ClientContext($SiteUrl)
$Context.Credentials = $Credential

# リスト取得
$list = $Context.Web.Lists.GetByTitle("ほげほげ")
# リストIDが分かっている場合、GetByIdでもOK
# $list = $Context.Web.Lists.GetById("IDの文字列")

# 追加する列の情報をXMLで記述
$col="<Field Type='Counter' DisplayName='Counter' Name='Counter' />"

# リストオブジェクトのフィールドにXMLの情報を追加
$list.Fields.AddFieldAsXml($col,$true,[Microsoft.SharePoint.Client.AddFieldOptions]::AddFieldToDefaultView)

# リストオブジェクト更新
$list.Update()

# 上記の更新を実行
$Context.ExecuteQuery()

# 後始末
$Context.Dispose()

コメント

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