SharePoint Online に対して PowerShell を使用する方法

こんにちは、SharePoint サポートの森 健吾 (kenmori) です。今回の投稿では、SharePoint Online を使用するにあたり PowerShell を使用するまでの準備と実践方法について下記にまとめさせていただきます。
SharePoint Online に対し PowerShell コマンドレットを使用する方法は、いくつかの方法があります。下記に概要を記載します。

概要

事前準備Windows PowerShell 3.0 について

方法1. SharePoint Online 管理シェルを使用する
2. SharePoint Online SDK を使用する

SharePoint Online テナントに対してグローバル管理者の権限を所有し、用意された管理タスクを実行する場合、方法 1. を使用するのが工数も少なく効率的です。
ただし、管理運用上でのニーズを満たすためには、現実的にほとんどの場合方法 2. を使用せざるを得ないものと思われます。方法 2. はサイトコレクション管理者や一般ユーザーでも使用可能な方法です。

SharePoint On-Premises で使用する SharePoint 管理シェルと大きく異なる点は、これらのコマンドはサーバーにリモート接続して処理を呼び出す形式のクライアント サイドで実行されるスクリプトであるという点です。

タイトル : SharePoint Online 管理シェルの概要
アドレス : https://technet.microsoft.com/ja-jp/library/fp161388(v=office.15).aspx

事前準備 : Windows PowerShell 3.0 について

Windows 7 以前の PC で使用する場合は、前提条件を満たすため Windows Management Framework 3.0 から Windows PowerShell 3.0 をインストールします。

タイトル : Windows Management Framework 3.0
アドレス : https://www.microsoft.com/en-us/download/details.aspx?id=34595

現在のバージョンを確認するためには、PowerShell を起動し $PSVersionTable コマンドを実行します。画面上に表示される PSVersion と CLRVersion を確認しましょう。

  

Windows 7 以前の PC においては、既定では SharePoint Online に対する PowerShell 実行の前提となる PowerShell バージョン (PSVersion) 3.0 および .NET Framework のCLR バージョン (CLRVersion) が4.0 以上という前提条件を満たしません。前提条件を満たさないことを確認した場合のみ、Windows PowerShell 3.0 をインストールします。

旧バージョン SharePoint On-Premises 環境と併用での注意

SharePoint On-Premises とのハイブリッド環境構築において、.NET Framework 3.5 (Major Version は 2.0) ベースで動作するSharePoint Server 2010 以前の On-Premises 環境に Windows Management Framework 3.0 をインストールしたくなると思います。
しかし、SharePoint On-Premises のオブジェクト モデルは、自身が想定したランタイム バージョンのメジャーバージョンでないとエラーを発生させる動作となります。SharePoint Server 2010 のオブジェクト モデルは、ランタイム バージョンが 2 (2.0, 3.0, 3.5) でないとエラー発生させますので動作しません。
そのため、PowerShell 3.0 を導入した場合、SharePoint Online へのスクリプトが使えるようになる反面、SharePoint On-Premises 側の管理シェルが逆に動作しなくなります。PowerShell の構成ファイルに supportedRuntime 要素を記載してサイドバイサイド実行させることができますが、構成が複雑となりますためあまりお勧めしません。

タイトル : <supportedRuntime> 要素
アドレス : https://msdn.microsoft.com/ja-jp/library/w4atty68(v=vs.110).aspx

以下より、実際に PowerShell を使用して、SharePoint Online に対してコマンドを実行していきます。

方法 1. SharePoint Online Management Shell

1) 下記からダウンロードして、コマンドレットをインストールします。

タイトル : SharePoint Online Management Shell
アドレス : https://www.microsoft.com/en-us/download/details.aspx?id=35588

2015/02/10 更新
SharePoint Online Management Shell (x86 版) がダウンロード可能になりました。

2) Connect-SPOService を実行して、管理サイトに接続します。

グローバル管理者権限のあるユーザー名とパスワードを指定します。

3) 接続後、コマンドを実行します。

例)

PS> Get-SPOSite

 

下記に様々な用途ごとに使用できる SPO コマンドレットのリファレンスを紹介しますので、ご参考にしてください。

タイトル : SharePoint Online リファレンス用の Windows PowerShell
アドレス : https://technet.microsoft.com/ja-jp/library/fp161397(v=office.15).aspx

 

方法 2. SharePoint Online Client Component SDK

1) 下記サイトからSDK をダウンロードします。

タイトル : SharePoint Online Client Components SDK
アドレス : https://www.microsoft.com/en-us/download/details.aspx?id=42038

 

2) *.ps1 ファイルを実行する場合は、下記のように PowerShell の実行ポリシーを変更しておきます。(SDK を使用する場合、ほとんどはスクリプトを作りこむことになるため、必須の手順となります。)

PS>Set-ExecutionPolicy RemoteSigned

タイトル : Set-ExecutionPolicy コマンドレットの使用
アドレス : https://technet.microsoft.com/ja-jp/library/ee176961.aspx

 3) SharePoint Online SDK が公開しているアセンブリを参照し、オブジェクトを操作してスクリプトを実装します。

 

PowerShell サンプル *.ps1

param (

  $siteUrl # 引数としてサイトの URL を受け取ります。

)

# 必要なアセンブリをロードします
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client")
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.Runtime")

# SPO に接続します
$context = New-Object Microsoft.SharePoint.Client.ClientContext($siteUrl)

#ユーザー名入力を促します。
Write-Host "Please input user name : "
$username = read-host

# パスワード入力を促します。
Write-Host "Please input password : "
$password = read-host -assecurestring

$credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($username, $password)
$context.Credentials = $credentials

# リストの一覧を取得し、タイトルを列挙します。
$lists = $context.Web.Lists
$context.Load($lists)
$context.ExecuteQuery()
$lists | select Title

PowerShell コマンドは、開発環境も不要で、運用上の処理を自動化する上で非常に便利です。
これからも当ブログでは PowerShell コマンドのサンプルなどは紹介していく予定ですので、ご参考にしていただけますと幸いです。
今回の投稿は以上になります。