テナント上の全ての画像ライブラリを Office 365 CDN に登録する方法

こんにちは。SharePoint Online サポートの江田です。

 

2017 年 4 月に Office 365 CDN がリリースされました。

それに伴い、SharePoint Online のスライドショー Web パーツの動作に関しても変更がありました。

 

下記の技術情報にも公開されているとおり、従来はスライドショー Web パーツが表示する画像を数秒間隔で自動で切り替わる動作をしていましたが、動作変更により既定ではこの動作が無効となるよう変更されました。 今後画像の自動切り替えの機能を利用するためには、スライドショー Web パーツが参照している画像ライブラリが Office 365 CDN に登録されていることが必要となります。

タイトル : Non–CDN-enabled SharePoint Picture Library Slideshow web part no longer switches automatically to new images

URL : https://support.microsoft.com/en-us/help/4021555/non-cdn-enabled-sharepoint-picture-library-slideshow-web-part-no-longe

 

特定の画像ライブラリを Office 365 CDN に登録する場合、下記の PowerShell コマンドで登録いただくことが可能です。

 

 
Add-SPOTenantCdnOrigin -CdnType Public -OriginUrl <画像ライブラリの相対パス>

 

例 (”https://testtenant.sharepoint.com/sites/testsite/picturelibrary" の URL を持つ画像ライブラリを登録する場合)

 
Add-SPOTenantCdnOrigin -CdnType Public -OriginUrl sites/testsite/picturelibrary

しかしながら画像ライブラリがテナントに多数存在し、それらを一括で Office 365 CDN に登録したいという要望をいただくことがあります。

そこで、Office 365 CDN にテナントに存在する全ての画像ライブラリを一括でOffice 365 CDN に登録いただけるような PowerShell スクリプトを作成しましたのでご活用ください。

 

*注意事項: 本 Blog の投稿で掲載している PowerShell のスクリプトはサンプル コードという位置付けであり、弊社にて動作を保証するものではございません。ご使用の際には、検証用テナント等で、十分なテストを実施いただいた上で、ご利用ください。

 

<事前準備>

1. スクリプトの実行環境に、SharePoint Online Management Shell、および SharePoint Online Client Components SDK がインストールされていない場合、それぞれ下記のサイトよりダウンロードし、端末にインストールします。

 

タイトル : SharePoint Online Management Shell 環境をセットアップする

URL : https://office.microsoft.com/ja-jp/sharepoint-help/HA102919087.aspx?CTT=5&origin=HA102915057

 

タイトル : SharePoint Online Client Components SDK

URL : https://www.microsoft.com/en-us/download/details.aspx?id=42038

 

<補足>

SharePoint Online Management Shell のバージョンが古い場合、Office 365 CDN に関するコマンドに対応していないことによりエラーが発生する可能性がございます。 事前に上記のリンクより最新の SharePoint Online Management Shell をダウンロードし、作業端末にインストールすることを推奨いたします。

 

2.テナントでは Office 365 CDN が既定では無効になっています。既定のまま変更されていない場合は、予め下記コマンドを実施いただき、Public の CDN を有効にします。(後述のスクリプトでは、Public の CDN に画像ライブラリを登録します)

 

Set-SPOTenantCdnEnabled -CdnType Public

 

<手順>

1. メモ帳を起動します。

2. 下記のスクリプトを貼り付けます。

 

 
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client") 
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.Runtime")
 
$script:adminURI = "https://xxxxx-admin.sharepoint.com"
$script:adminAccount = "xxxx@xxxxx.onmicrosoft.com"
$script:password = "xxxxx"
 
function AddALLPictureLibraryInSiteToCDN($url)
{
    try
    {
        $ctx = New-Object Microsoft.SharePoint.Client.ClientContext($url) 
        $ctx.Credentials = $script:credentials 
 
        #指定されたサイトを取得
        $web = $ctx.Web    
        $ctx.Load($web)
        $ctx.ExecuteQuery()
 
        #サイト レベルでの CDN の設定
        SetCDN $web $ctx
 
        #指定されたサイトのサブサイトを取得
        $webs = $ctx.Web.Webs    
        $ctx.Load($webs)
        $ctx.ExecuteQuery()
    }
    catch
    {
        return
    }
 
    foreach($subweb in $webs)
    {        
        #再帰処理
        AddALLPictureLibraryInSiteToCDN $subweb.Url
    }
}
 
function SetCDN($web, $ctx)
{
    $lists = $web.Lists
    $ctx.Load($lists)
    $ctx.ExecuteQuery()
 
    #サイト内に存在する画像ライブラリの取得
    $pictureLibs = $lists | Where{[int]$_.BaseTemplate -eq 109}
 
    foreach($pictureLib in $pictureLibs)
   {
        #画像ライブラリのルートパスを取得
        $folder = $pictureLib.RootFolder
        $ctx.Load($folder)
        $ctx.ExecuteQuery()
        $folder.ServerRelativeUrl
 
        #画像ライブラリを CDN に追加     
        Add-SPOTenantCdnOrigin -CdnType Public -OriginUrl $folder.ServerRelativeUrl -Confirm:$false
    }
}
 
#Connect-SPOService で接続
$cred = New-Object -TypeName System.Management.Automation.PSCredential -argumentlist $adminAccount, $(convertto-securestring $password -asplaintext -force)
Connect-SPOService -Url $adminURI -Credential $cred
 
#CSOM用のCredential
$secpwd = ConvertTo-SecureString $script:password -AsPlainText -Force 
$script:credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($script:adminAccount, $secpwd)
 
#テナント内の全ての画像ライブラリを取得し、CDN に追加
Write-Host "Script started"
Get-SPOSite -Limit ALL | %{ AddALLPictureLibraryInSiteToCDN($_.Url)}
Write-Host "Script completed"

 

3. 貼り付けたスクリプト内の下記の変数の値をお客様のテナント、管理者ユーザーのアカウント情報に合わせて変更します。

 
$script:adminURI = "https://xxxxx-admin.sharepoint.com"

$script:adminAccount = "xxxx@xxxxx.onmicrosoft.com"

$script:password = "xxxxx"

4. .ps1 形式で保存します。

5. PowerShell を起動し、作成した、スクリプトを実行します。

 

今回の投稿は以上です。

本情報の内容は、作成日時点でのものであり、予告なく変更される場合があります。

 

- 参考情報

タイトル : General availability of Office 365 CDN

URL : https://dev.office.com/blogs/general-availability-of-office-365-cdn