SharePoint Online で IE ドキュメント モードを 10 に変更するサンプル コード


以下のサイトに記載された IE のドキュメント モードを 10 に指定するコードが記載されております。

本投稿では、これを応用し SharePoint Online の全サイト コレクション (OneDrive for Business 個人用サイトを除く) を対象として設定を適用します。

タイトル : Display a classic SharePoint Online site in Internet Explorer 10 document mode
アドレス : https://support.office.com/en-us/article/4b4572b7-9223-45ec-8497-557a643da12a
機械翻訳 : https://support.office.com/ja-jp/article/4b4572b7-9223-45ec-8497-557a643da12a

 

事前準備

下記の内容を実施済みのクライアント環境においては、事前準備の項目を再度実施する必要はございません。

1 : SharePoint Online 管理シェルのダウンロード

サンプル スクリプトを実行するための実行環境として SharePoint Online 管理シェルをダウンロードします。

以下のリンクより最新版がダウンロード可能です。

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

2 : スクリプトの実行ポリシーを変更する

1)SharePoint Online Mnagement Shell を管理者として起動します。
2) 以下のコマンドを実行し、現在の PowerShell の実行ポリシーを確認します。

Get-ExecutionPolicy

3) 以下のコマンドを実行し、PowerShell の実行ポリシーを変更します。

Set-ExecutionPolicy RemoteSigned

補足 : RemoteSigned 以上の実行ポリシー (例. Unrestricted) が指定されている場合は、指定の必要はありません。

 

コードの実行

1) 以下のコードを DisableEdgeMode.ps1 として保存します。

param(
  $adminurl,
  $username,
  $password, 
  $Disable = $true,
  $Verbose = $false,
  $Force = $false
)

##the first two lines of the script load the CSOM model:
$loadInfo1 = [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client")
$loadInfo2 = [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.Runtime")

function ExecuteQueryWithIncrementalRetry($retryCount, $delay)
{
  $retryAttempts = 0;
  $backoffInterval = $delay;
  if ($retryCount -le 0)
  {
    throw "Provide a retry count greater than zero."
  }
  if ($delay -le 0)
  {
    throw "Provide a delay greater than zero."
  }
  while ($retryAttempts -lt $retryCount)
  {
    try
    {
    $script:context.ExecuteQuery();
    return;
    }
    catch [System.Net.WebException]
    {
      $response = $_.Exception.Response
      if ($response -ne $null -and $response.StatusCode -eq 429)
      {
        Write-Host ("CSOM request exceeded usage limits. Sleeping for {0} seconds before retrying." -F ($backoffInterval/1000))
        #Add delay.
        Start-Sleep -m $backoffInterval
        #Add to retry count and increase delay.
        $retryAttempts++;
        $backoffInterval = $backoffInterval * 2;
      }
      else
      {
        throw;
      }
    }
  }
  throw "Maximum retry attempts {0}, have been attempted." -F $retryCount;
}

$securepwd = ConvertTo-SecureString $password -AsPlainText -Force
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $username, $securepwd
Connect-SPOService -Url $adminurl -Credential $cred
$siteurls = Get-SPOSite | select Url

foreach ($siteurl in $siteurls)
{
  if ($Force)
  {
    try
    {
      $PrevIsAdmin = (Get-SPOUser -Site $siteurl.Url -LoginName $username).IsSiteAdmin
    }
    catch
    {
      $PrevIsAdmin = ($_.Exception.GetType().Name -ne "ServerUnauthorizedAccessException")
    }

    if (!$PrevIsAdmin)
    {
      $tmpuser = Set-SPOUser -Site $siteurl.Url -LoginName $username -IsSiteCollectionAdmin $true
    }
  }

  try
  {
    try
    {
      $script:context = New-Object Microsoft.SharePoint.Client.ClientContext($siteurl.Url)
      $spocred = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($username, $securepwd)
      $script:context.Credentials = $spocred

      if ($Disable)
      {
        $featureguid = new-object System.Guid "80E47777-D21C-46E0-9139-7C7741EB4B54"
        [void]$script:context.Site.Features.Add($featureguid, $true, [Microsoft.SharePoint.Client.FeatureDefinitionScope]::None)
        ExecuteQueryWithIncrementalRetry -retryCount 5 -delay 30000
      }
      else
      {
        $featureguid = new-object System.Guid "80E47777-D21C-46E0-9139-7C7741EB4B54"
        [void]$script:context.Site.Features.Remove($featureguid, $true);
        ExecuteQueryWithIncrementalRetry -retryCount 5 -delay 30000
      }
      if ($Verbose -eq $true)
      {
        Write-Output ($siteurl.Url + ",OK")
      }
    }
    catch [System.Net.WebException]
    {
      Write-Output ($siteurl.Url + ",NG," + $_)
    }
 }
 finally
 {
   if ($Force -and (!$PrevIsAdmin))
   {
     $tmpuser = Set-SPOUser -Site $siteurl.Url -LoginName $username -IsSiteCollectionAdmin $false
   }
 }
}

2) SharePoint Online Management Shell を起動します。
3) スクリプトを配置したフォルダーに移動し、作成した .ps1 ファイルを以下のように実行します。

.\DisableEdgeMode.ps1 -adminurl https://tenant-admin.sharepoint.com -username accountname -password password

パラメータ

-adminurl ・・・ SharePoint 管理センター アドレス
-username ・・・ 各サイトに変更処理を行う管理者ユーザー (要グローバル管理者, SharePoint 管理者, *サイト コレクション管理者)
-password ・・・ 上記ユーザーのパスワード
-Disable ・・・ $true の場合、IE10 モードに変更 / $false の場合、再度 Edge モードに切り戻し (省略可 : 既定 $true)
-Verbose ・・・ $true 成功時のログも出力 / $false 成功時のログを省略 (省略可 : 既定 $false)
-Force ・・・ (*) $true ユーザーにサイトの管理者権限がない場合は強制的に一時追加 / $false ユーザーにサイトの管理者権限がない場合はそのまま実行しエラーになる (省略可 : 既定 $false)

 

4) PowerShell 上で実行結果を確認します。

サイト コレクションの機能が有効化された場合は、以下のように URL, OK と表示されます。

成功例 (-Verbose $true の場合)

https://tenant.sharepoint.com/sites/siteA,OK

サイト コレクションの機能が有効化に失敗した場合、以下のメッセージが表示されます。

以下のメッセージが表示された場合は、スクリプトの実行アカウントがサイト コレクションの管理者として登録されているかをご確認ください。また、必要に応じて -Force $true オプションも検討ください。

失敗例

https://tenant.sharepoint.com/sites/siteB,NG,リモート サーバーがエラーを返しました: (401) 許可されていません

 

切り戻し

ドキュメント モードの変更を元に戻す場合は、スクリプト実行時の $Disable オプションに $false を指定して実行します。

.\DisableEdgeMode.ps1 -adminurl https://tenant-admin.sharepoint.com -username accountname -password password -Disable $false

 

今回の投稿は以上です。

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

 


	
Comments (0)

Skip to main content