SharePoint Online ファイル開く既定設定のテナント一括変更(PnP PowerShell活用)

1. 全体概要と結論

SharePoint Onlineでファイルを開く際の既定設定を「デスクトップアプリで開く」に変更したいという要望に対し、標準機能ではテナント全体に一括適用する設定が存在しないことが確認さできた。

ただ代替案があり、PnP PowerShell スクリプトを用いた一括設定変更が有効。ただし、PnP PowerShellはオープンソースプロジェクトであり、Microsoftの正式サポート対象外となるため、実施にあたっては十分な検証が必要。

関連サービス・ツール

  • SharePoint Online
  • PnP PowerShell
  • Microsoft 365 管理センター

調査したこと

  • 既定では「ブラウザで開く」が優先されるため、ユーザーの利便性を高めるために「デスクトップアプリ」へ一括変更したい。
  • サイトやライブラリごとの手動設定ではなく、テナント内の全サイトに自動適用する方法が必要。

2.1. テナント全体への適用方法について

調査したこと

SharePoint Onlineでファイルを開く既定値を「デスクトップアプリで開く」にしたい。サイトコレクション単位やライブラリ単位の設定方法は把握しているが、これをテナント全体に一括適用する手段はあるか。

  • 発生事象: ユーザーがファイルを開く際、毎回手動で「アプリで開く」を選択する必要がある。
  • 実施済みの対策: 1. サイトコレクション機能「既定でクライアントアプリケーションでドキュメントを開く」のアクティブ化
  1. ドキュメントライブラリ設定「ブラウザーで開くドキュメント」の変更

調査結果

標準機能にはテナント一括設定は存在しない。 しかし、PnP PowerShellを活用したスクリプト実行により、全サイトのリスト設定を一巡して変更することが可能。

根本原因と技術解説

SharePointの仕様上、ドキュメントの動作制御はサイト・ライブラリレベルのプロパティ(DefaultItemOpenInBrowser)に依存しており、一元的な管理スイッチが用意されていない。このため、APIやPowerShellを通じて各コンテナの属性を書き換える必要がある。


2.2. 対応策・実行手順

以下の手順で PnP PowerShell 環境を構築し、一括変更スクリプトを実行する。

① 環境準備

  1. PowerShell 7.2 以降をインストール
  2. モジュールのインストールとインポート:
Install-Module PnP.PowerShell -Force
Install-Module -Name Microsoft.Online.SharePoint.PowerShell -Force
Import-Module Microsoft.Online.SharePoint.PowerShell -UseWindowsPowerShell
  1. Entra ID へのアプリ登録(対話型ログイン用):
Register-PnPEntraIDAppForInteractiveLogin -ApplicationName "PnP Rocks" -Tenant <テナントドメイン>

② 設定変更スクリプトの実行

テナント内のサイトを全取得し、指定したドキュメントライブラリ(例: “Shared Documents”)の設定をループ処理で変更する。

# 1. 必要な変数を設定する
$username = "<管理者ユーザー名>"
$spurl = "<テナント管理センターURL>"
$ListName = "Shared Documents" # 日本語環境では "ドキュメント" 等、環境に合わせて変更

# 2. SPO 管理センターに接続
Connect-SPOService -Url $spurl

# 3. サイトの URL を全取得
$sites = Get-SPOSite -Limit all | Select-Object -ExpandProperty Url

foreach ($siteUrl in $sites) {
    # サイト管理者に自身を追加(権限不足回避)
    Set-SPOUser -Site $siteUrl -LoginName $username -IsSiteCollectionAdmin $true

    # PnP 接続
    Connect-PnPOnline -Url $siteUrl -Interactive -ClientId <事前準備で確認したClientId>

    Try {
        $List = Get-PnPList $ListName -Includes DefaultItemOpenInBrowser
        # False に設定することでデスクトップアプリを優先
        $List.DefaultItemOpenInBrowser = $False
        $List.Update()
        Invoke-PnPQuery
        Write-Host "Success: $siteUrl" -ForegroundColor Green
    }
    catch {
        Write-Host "Error: $siteUrl - $($_.Exception.Message)" -ForegroundColor Red
    }
}

3. 全ての参考URLリスト


コメント

タイトルとURLをコピーしました