⚙️

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 で呼び出す方法も考えられます。ただし、この場合は認証の問題が発生します。こちらも対応は可能ですが、追加の工夫が必要です。

https://zenn.dev/karamem0/articles/2016_05_25_000000

おわりに

SharePoint Online の管理を PowerShell で実施している事例があれば、ぜひご意見をお聞かせいただきたいです。

脚注
  1. SharePoint 2007 以前の話ですが、その頃の SharePoint には触れたことがないため詳細は分かりません。 ↩︎

  2. Get-SPWeb が非常に便利なため、C# で SPSite.OpenWeb() を利用するたびに PowerShell なら一発でできるのにと感じています。 ↩︎

Discussion