SharePoint を PowerShell から操作する方法まとめ
はじめに
現在は SharePoint をメインで扱っているこのブログですが、PowerShell タグの付いた記事も増えてきました。SharePoint の構築や運用において、PowerShell は欠かせない存在となっています。過去のバージョンの SharePoint では stsadm というコマンド ライン ツールが使用されていましたが、現在は利用されなくなりました。[1]
また、SharePoint Online の登場により新しく追加されたライブラリもありますので、あわせて整理します。
SharePoint Server (オンプレミス) の場合
SharePoint をインストールすると、スタート メニューに SharePoint 20XX 管理シェル が登録されます。ここから SharePoint を操作するためのさまざまなコマンドレットを実行できます。スクリプトで実行する場合や、ISE を利用したい場合は、以下のコマンドレットを実行することで、SharePoint の管理シェルを利用できるようになります。
Add-PSSnapin "Microsoft.SharePoint.PowerShell"
SharePoint 管理シェルの実体は Microsoft.SharePoint.dll (およびその関連ライブラリ) ですので、SharePoint のサーバー オブジェクト モデルがそのまま適用されます。そのため、SharePoint 開発経験のある開発者にとっては非常に扱いやすいです。また、便利なコマンドレット群も提供されています。[2]
Visual Studio で SharePoint ソリューションを開発する際、デバッグ時にテスト データを投入したい場合があります。そのような場合は、デプロイ前後のコマンドで PowerShell スクリプトを呼び出すようにすると効率的です。ただし、その際に注意が必要なのは、Visual Studio は x86 プロセスで動作するため、PowerShell も x86 で呼び出されてしまう点です。SharePoint の管理シェルは x64 でのみ動作するため、PowerShell も x64 で動作させる必要があります。
"%WINDIR%\SysNative\WindowsPowerShell\v1.0\powershell.exe" -ExecutionPolicy Unrestricted -File "$(ProjectDir)\Hoge.ps1"
SharePoint Online の場合
SharePoint Online ではサーバーにログインできないため、代わりに SharePoint Online 管理シェルが提供されています。ただし、SharePoint Online 管理シェルで実行できる操作は非常に限定的です。主にユーザー管理とサイト コレクションの管理のみが可能です。その他の操作をする場合は、SharePoint クライアント ライブラリ (CSOM) を利用する必要があります。実際には、CSOM で対応できない部分を SharePoint Online 管理シェルが補完している形です。
CSOM は PowerShell を前提として設計されているわけではありません。具体的には、CSOM では Load メソッドで関連プロパティを読み込む際に Include メソッドで関連オブジェクトも同時に読み込めます。これはラムダ式を利用しているため PowerShell では実行できません。厳密にはリフレクションを利用すれば可能ですが、そこまで行うメリットは少ないと考えられます。
試したことはありませんが、REST API を Invoke-RestMethod で呼び出す方法も考えられます。ただし、この場合は認証の問題が発生します。こちらも対応は可能ですが、追加の工夫が必要です。
おわりに
SharePoint Online の管理を PowerShell で実施している事例があれば、ぜひご意見をお聞かせいただきたいです。
Discussion