SharepointのカスタムリストをPowershellでUpdateする方法 以前ドキュメントライブラリの操作で使用したクライアント サイド オブジェクト モデル (以下、CSOM) のリモート実行モジュールを使います。 ドキュメントライブラリについての操作は下記をご覧ください
CSOMの入手使用しているSharepointサーバに応じたCSOMモジュールを入手します。 SharePoint OnlineNuget 版 Microsoft Download 版 SharePoint Server 2016タイトル : SharePoint Server 2016 Client Components SDK SharePoint Server 2013タイトル : SharePoint Server 2013 Client Components SDK SharePoint Server 2010タイトル : SharePoint Foundation 2010 Client Object Model Redistributable リスト操作の準備CSOMモジュールの読み込みまずは、CSOMモジュールを読み込みます。結果が返ってくるので|Out-Nullで非表示にしてますが、表示しても一向に構いません。
サイトコレクションの読み込みまずURLを指定します。OnlineにしろOn-Premiseにしろ、下記のいずれかで指定できると思います。
認証情報の作成Sharepoint Onlineの場合は認証情報を作成する必要があります。
On-Premiseのサーバの場合には、統合認証が使えるので下記でもいけるはず。
Contextの作成Contextを作って、認証情報を付与します。
リストの名前を指定してリストを読み込む
サンプルでは”ListName”としていますが、2バイトコード指定ができるので日本語でもOKです。 リストの情報を表示してみましょう。
リストのアイテムを読み込むCamlQueryを準備してアイテムを読み込みます。xmlが無指定で良ければ全件読み込みます。
これで$ListItemsにリストアイテムの配列が格納されます。 これで更新対象のリストが準備できました。 リストのアイテムに対して更新をする$ListItemsはリストアイテムの配列なので、個々のアイテムを取り出して操作をする必要があります。
ユーザー毎の名前(User)、Mail、個人別サイト(URL)が格納されたリストを想定します。 テキスト項目を更新するテキストの項目であれば、代入するだけで更新できます。
このUpdateメソッドは手元のオブジェクトを更新するだけなので、サーバに反映するには$Context.ExecuteQuery()メソッドを実行する必要があります。複数行をまとめてExecuteQueryするとコケることがあるので、1アイテムごとにやった方が良さそうです。 選択式の項目もテキスト項目と同じ要領で更新できます。 URL項目を更新する[ハイパーリンクまたは画像]列はFieldUrlValue型に格納されています。新しいオブジェクト作って、プロパティを設定、FieldUrlValue型にCastしてから格納してすると更新できます。
ユーザー項目を更新する[ユーザーまたはグループ]列はFieldUserValue型に格納されています。Idで管理されていますが、URLと同じ様にFieldUserValue型にCastしてから格納します。
更新&片付け一通り更新が終わったらExecuteQueryしてDisposeしてオブジェクトを開放しましょう。
サンプルソース |