今回はPowerShellを使ってSharePointOnlineのリストに列を追加する手順について紹介していきます(∩´∀`)∩
事前準備
PowerShellのスクリプトを実行する際に必要なSDK等がありますので、その辺のインストール等がまだの方は↓の記事を参考に準備しておいてください(∩´∀`)∩
SharePoint Online Client Component SDK というヤツを使います。
リストの取得
接続等行った状態から説明していきます。その辺は記事末尾のサンプルコード内には書いておきますので、そちらも参考にしていただけたらと。
今回は以前作成した ほげほげ(hogehoge)というリストに列を追加します。
で、まずはリストを取得します。
1 2 3 4 5 |
# リスト取得 $list = $Context.Web.Lists.GetByTitle("ほげほげ") # リストIDが分かっている場合、GetByIdでもOK # $list = $Context.Web.Lists.GetById("IDの文字列") |
GetByTitle か GetByID でリストを取得します。タイトルを使う時は内部名でも表示名でもどちらでもOKです。今回は表示名です。
IDで取得する場合は下記記事の方法などを使うか、PowerShellでなんやかやするなどしてIDを取得しておきます。
列情報のXMLを記述
次に追加したい列の情報・設定をXMLで記述し、変数に格納します。
1 2 |
# 追加する列の情報をXMLで記述 $col = "<Field Type='Counter' DisplayName='Counter' Name='Counter' />" |
Type(列の種類)や表示名、内部名などを指定します。上のサンプル以外の項目は下記ページ参照。
https://learn.microsoft.com/en-us/previous-versions/office/sharepoint-csom/ee536163(v=office.15)
また 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というドキュメントに記載されていますので、細かく知りたい方はそちらも読んでみてください。
列情報の追加
リストオブジェクトへ先ほど作成したXMLを元に列を追加します。
1 2 |
# リストオブジェクトのフィールドにXMLの情報を追加 $list.Fields.AddFieldAsXml($col,$true,[Microsoft.SharePoint.Client.AddFieldOptions]::AddFieldToDefaultView) |
1つ目の引数が列情報のXML、2つ目の引数がデフォルトのビューへ追加するorしない、3つ目がオプションです。
3つ目のオプションは下記ページ参照。
https://learn.microsoft.com/en-us/previous-versions/office/sharepoint-csom/ee542202(v=office.15)
更新とか後始末
最後に更新や後始末をして完了です。
1 2 3 4 5 6 7 8 |
# リストオブジェクト更新 $list.Update() # 上記の更新を実行 $Context.ExecuteQuery() # 後始末 $Context.Dispose() |
サンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
[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() |