SharePoint を PowerShell から操作する方法まとめ
はじめに
この記事は PowerShell Advent Calendar 2016 の参加記事です。
今は SharePoint をメインでやっているこのブログもいつの間にか PowerShell タグがついた記事が結構増えているわけですが、SharePoint の構築や運用にあたって PowerShell は欠かせない存在になりました。過去のバージョンの SharePoint では stsadm
というコマンド ライン ツールを使っていたそうですが、今はお役御免となりました。[1]
また SharePoint Online の登場により、新しく追加されたライブラリもありますので、合わせて整理したいと思います。
SharePoint Server (オンプレミス) の場合
SharePoint をインストールすると、スタート メニューに SharePoint 20nn 管理シェル が登録されます。ここから 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
という Entity Framework みたいな呼び出しをするわけですが、ラムダ式なので PowerShell では死にます。やればできるみたいですが、そこまでやるメリットもなさそう。
試したことないですが、REST API を Invoke-RestMethod
で呼び出す方法もあるかもしれません。でも今度は認証の壁が立ちはだかるのです。こちらもやればできますけど。
おわりに
SharePoint Online の管理を PowerShell でやっている事例があれば是非いろいろ聞いてみたいものです。
Discussion