SharePoint を PowerShell から操作する方法まとめ
はじめに
この記事は PowerShell Advent Calendar 2016 の参加記事です。
今は 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