SharePoint Online管理シェルとは?
SharePoint Online管理シェルは、PowerShellを使ってSharePoint Onlineを管理するためのツールです。
通常、SharePoint Onlineの管理は、ブラウザで管理センターを開いて行います。
しかし、管理シェルを使うと、コマンドを入力するだけで同じ作業ができます。
なぜ管理シェルを使うのか?
管理センターでの手作業よりも、管理シェルには大きなメリットがあります。
大量の作業を一度に実行できる:
12個の新しいサイトを作る、100人のユーザーを追加するなど、繰り返し作業を自動化できます。
手作業だと何時間もかかる作業が、数分で完了します。
ミスが減る:
コマンドを一度作れば、毎回同じ設定で実行できます。
手作業で繰り返すと、入力ミスやクリック忘れが起こりますが、コマンドなら確実です。
スケジュール実行できる:
Windows タスクスケジューラと組み合わせて、定期的な作業を自動化できます。
管理センターにない機能を使える:
一部の高度な設定は、管理シェルでしか実行できません。
SharePoint Online管理シェルの特徴
できること
SharePoint Online管理シェルでは、以下の管理作業ができます。
組織レベルの設定:
- SharePoint テナント全体の設定変更
- 外部共有の設定
- ストレージ制限の設定
サイトコレクションの管理:
- サイトコレクションの作成・削除
- サイトのURLやタイトルの変更
- ストレージ容量の割り当て
ユーザーとグループの管理:
- サイトへのユーザー追加・削除
- 権限レベルの設定
- サイト管理者の設定
レポート作成:
- すべてのサイトコレクション一覧の取得
- ユーザー権限の一覧表示
- ストレージ使用状況の確認
できないこと
SharePoint Online管理シェルには制限があります。
サイト内のコンテンツ管理:
リストの作成、アイテムの追加、ファイルのアップロードなど、サイト内の細かい操作はできません。
これらを行うには、PnP PowerShellやCSOMを使う必要があります。
一部の高度な機能:
オンプレミス版のSharePoint管理シェルと比べると、使えるコマンドが少ないです。
他のPowerShellモジュールとの違い
SharePoint Onlineを管理するPowerShellモジュールは3種類あります。
SharePoint Online管理シェル:
- Microsoft公式のモジュール
- サイトコレクションとテナント設定の管理に特化
- SharePoint管理者権限が必要
- サポート対象
PnP PowerShell:
- コミュニティが開発したモジュール
- 600以上のコマンドレット
- サイト内のコンテンツも管理可能
- 一般ユーザーでも接続可能(権限があれば)
- サポート対象外(Microsoftのサポートは受けられない)
CSOM(Client Side Object Model):
- プログラム開発者向け
- SharePointのAPIを直接操作
- 最も柔軟だが難易度が高い
どれを使うべきか?
用途によって使い分けます。
- テナント設定やサイトコレクション管理のみ → SharePoint Online管理シェル
- サイト内のリストやアイテムも操作したい → PnP PowerShell
- プログラムから細かく制御したい → CSOM
インストール方法
SharePoint Online管理シェルをインストールする方法は2つあります。
方法1: PowerShellギャラリーからインストール(推奨)
PowerShellギャラリーから直接インストールする方法が最も簡単です。
手順:
ステップ1: PowerShellを管理者として起動
- スタートメニューを開く
- 「PowerShell」と入力
- 「Windows PowerShell」を右クリック
- 「管理者として実行」をクリック
ステップ2: モジュールがインストール済みか確認
以下のコマンドを実行します。
Get-Module -Name Microsoft.Online.SharePoint.PowerShell -ListAvailable | Select Name,Version
何も表示されなければ、モジュールはまだインストールされていません。
バージョン番号が表示されれば、すでにインストールされています。
ステップ3: モジュールをインストール
すべてのユーザー向けにインストール(管理者権限が必要):
Install-Module -Name Microsoft.Online.SharePoint.PowerShell
実行すると、以下のメッセージが表示されます。
信頼されていないリポジトリ
PSGallery からモジュールをインストールしようとしています。このリポジトリを信頼しますか?
「Y」を入力してEnterキーを押します。
現在のユーザーのみにインストール(管理者権限不要):
管理者権限がない場合は、以下を使用します。
Install-Module -Name Microsoft.Online.SharePoint.PowerShell -Scope CurrentUser
ステップ4: インストールを確認
再度、以下のコマンドを実行します。
Get-Module -Name Microsoft.Online.SharePoint.PowerShell -ListAvailable | Select Name,Version
バージョン番号が表示されれば、インストール成功です。
方法2: インストーラーをダウンロード
Microsoftのダウンロードセンターからインストーラーを入手する方法もあります。
手順:
- 以下のURLにアクセス
https://www.microsoft.com/ja-jp/download/details.aspx?id=35588 - 「ダウンロード」ボタンをクリック
- 64ビット版または32ビット版を選択(通常は64ビット)
- ダウンロードした.msiファイルを実行
- インストールウィザードの指示に従う
インストール後、スタートメニューに「SharePoint Online Management Shell」という項目が追加されます。
モジュールの更新
定期的にモジュールを更新して、最新の機能を使えるようにします。
更新コマンド:
Update-Module -Name Microsoft.Online.SharePoint.PowerShell
PowerShellを管理者として起動して実行してください。
更新の確認:
Get-Module -Name Microsoft.Online.SharePoint.PowerShell -ListAvailable | Select Name,Version
複数のバージョンが表示される場合があります。
最新のバージョンが自動的に使用されます。
SharePoint Onlineへの接続
モジュールをインストールしたら、SharePoint Onlineに接続します。
接続の基本
必要な権限:
- SharePoint管理者
- グローバル管理者
これらの権限がないと接続できません。
多要素認証(MFA)が有効な場合の接続(推奨)
最近のMicrosoft 365環境では、ほとんどの場合MFAが有効になっています。
接続コマンド:
Connect-SPOService -Url https://組織名-admin.sharepoint.com
「組織名」の部分を実際の組織名に置き換えます。
例:組織名が「contoso」の場合
Connect-SPOService -Url https://contoso-admin.sharepoint.com
組織名の確認方法:
SharePoint管理センターにブラウザでアクセスしたときのURLを見ます。
例:https://contoso-admin.sharepoint.com
「contoso」の部分が組織名です。
コマンドを実行すると、ブラウザが開いてサインイン画面が表示されます。
SharePoint管理者のアカウントでサインインします。
MFAの認証コードを入力します。
認証が完了すると、PowerShellがSharePoint Onlineに接続されます。
多要素認証が無効な場合の接続
MFAが無効な環境(非推奨)では、認証情報を直接指定できます。
方法1:対話的に認証情報を入力
Connect-SPOService -Url https://組織名-admin.sharepoint.com -Credential admin@組織名.onmicrosoft.com
実行すると、パスワード入力ダイアログが表示されます。
パスワードを入力して「OK」をクリックします。
方法2:スクリプトで認証情報を指定
$username = "admin@組織名.onmicrosoft.com"
$password = "パスワード"
$securePassword = ConvertTo-SecureString $password -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential($username, $securePassword)
Connect-SPOService -Url https://組織名-admin.sharepoint.com -Credential $credential
セキュリティ上の注意:
パスワードをスクリプトに直接書くのは危険です。
本番環境では、認証情報を安全に保存する方法を使用してください。
接続の確認
接続が成功したか確認します。
Get-SPOSite -Limit 10
サイトコレクションの一覧が表示されれば、接続成功です。
接続の切断
作業が終わったら、接続を切断します。
Disconnect-SPOService
基本的なコマンドレット
SharePoint Online管理シェルのコマンドレットは、すべて「動詞-SPO名詞」の形式です。
動詞の種類:
- Get:情報を取得
- Set:設定を変更
- New:新規作成
- Remove:削除
- Add:追加
名詞の種類:
- Site:サイトコレクション
- User:ユーザー
- Group:グループ
- Tenant:テナント(組織全体)
すべてのコマンドレットを確認
Get-Command -Module Microsoft.Online.SharePoint.PowerShell
すべての利用可能なコマンドレットが一覧表示されます。
コマンドレットのヘルプを表示
Get-Help コマンドレット名 -Detailed
例:
Get-Help Get-SPOSite -Detailed
コマンドレットの使い方、パラメータ、例が表示されます。
よく使うコマンド集
実務でよく使うコマンドを紹介します。
サイトコレクションの管理
すべてのサイトコレクションを取得:
Get-SPOSite -Limit All
特定のサイトコレクションの詳細を取得:
Get-SPOSite -Identity https://組織名.sharepoint.com/sites/サイト名
新しいサイトコレクションを作成:
New-SPOSite -Url https://組織名.sharepoint.com/sites/新サイト名 `
-Owner admin@組織名.onmicrosoft.com `
-StorageQuota 1024 `
-Title "新しいサイト" `
-Template "STS#3"
パラメータの説明:
- Url:サイトのURL
- Owner:サイトの所有者
- StorageQuota:ストレージ容量(MB単位)
- Title:サイトのタイトル
- Template:サイトテンプレート(STS#3 = チームサイト)
サイトコレクションを削除:
Remove-SPOSite -Identity https://組織名.sharepoint.com/sites/サイト名
削除されたサイトは、ごみ箱に移動します。
サイトコレクションを完全に削除(ごみ箱からも削除):
Remove-SPODeletedSite -Identity https://組織名.sharepoint.com/sites/サイト名
削除されたサイトコレクションを復元:
Restore-SPODeletedSite -Identity https://組織名.sharepoint.com/sites/サイト名
サイトのストレージ容量を変更:
Set-SPOSite -Identity https://組織名.sharepoint.com/sites/サイト名 -StorageQuota 2048
ユーザーとグループの管理
サイトのユーザー一覧を取得:
Get-SPOUser -Site https://組織名.sharepoint.com/sites/サイト名
サイトにユーザーを追加:
Add-SPOUser -Site https://組織名.sharepoint.com/sites/サイト名 `
-LoginName user@組織名.onmicrosoft.com `
-Group "サイト名 メンバー"
サイト管理者を追加:
Set-SPOUser -Site https://組織名.sharepoint.com/sites/サイト名 `
-LoginName user@組織名.onmicrosoft.com `
-IsSiteCollectionAdmin $true
サイトからユーザーを削除:
Remove-SPOUser -Site https://組織名.sharepoint.com/sites/サイト名 `
-LoginName user@組織名.onmicrosoft.com
サイト管理者を削除:
Set-SPOUser -Site https://組織名.sharepoint.com/sites/サイト名 `
-LoginName user@組織名.onmicrosoft.com `
-IsSiteCollectionAdmin $false
テナント(組織)レベルの設定
テナントの設定を取得:
Get-SPOTenant
組織全体の設定が表示されます。
外部共有設定を変更:
Set-SPOTenant -SharingCapability ExternalUserAndGuestSharing
SharingCapabilityの値:
- Disabled:共有無効
- ExternalUserSharingOnly:認証されたゲストのみ
- ExternalUserAndGuestSharing:すべてのゲスト(推奨)
- ExistingExternalUserSharingOnly:既存の外部ユーザーのみ
OneDrive for Businessのストレージ容量を設定:
Set-SPOTenant -OneDriveStorageQuota 5120
容量はMB単位です(5120MB = 5GB)。
ストレージとクォータの管理
すべてのサイトのストレージ使用状況を取得:
Get-SPOSite -Limit All | Select Url, StorageUsageCurrent, StorageQuota | Format-Table
ストレージ使用量が多いサイトを特定:
Get-SPOSite -Limit All | Where {$_.StorageUsageCurrent -gt 1000} | Select Url, StorageUsageCurrent | Format-Table
1000MB(1GB)以上使用しているサイトが表示されます。
レポート作成
すべてのサイトコレクションをCSVにエクスポート:
Get-SPOSite -Limit All | Select Url, Title, Owner, StorageUsageCurrent, LastContentModifiedDate | Export-Csv -Path "C:\Sites.csv" -NoTypeInformation -Encoding UTF8
特定のユーザーが所有するサイトを検索:
Get-SPOSite -Limit All | Where {$_.Owner -eq "user@組織名.onmicrosoft.com"}
実践的なサンプルスクリプト
実務で使える実践的なスクリプトを紹介します。
サンプル1: 複数のサイトを一括作成
部署ごとにサイトを作成する例です。
# SharePoint Onlineに接続
Connect-SPOService -Url https://組織名-admin.sharepoint.com
# サイト情報を配列で定義
$sites = @(
@{Name="営業部"; Url="sales"; Owner="sales-admin@組織名.onmicrosoft.com"},
@{Name="開発部"; Url="dev"; Owner="dev-admin@組織名.onmicrosoft.com"},
@{Name="総務部"; Url="admin"; Owner="admin@組織名.onmicrosoft.com"}
)
# 各サイトを作成
foreach ($site in $sites) {
$url = "https://組織名.sharepoint.com/sites/" + $site.Url
Write-Host "作成中: $url" -ForegroundColor Green
New-SPOSite -Url $url `
-Owner $site.Owner `
-StorageQuota 1024 `
-Title $site.Name `
-Template "STS#3"
Write-Host "完了: $($site.Name)" -ForegroundColor Green
}
Write-Host "すべてのサイト作成が完了しました" -ForegroundColor Yellow
サンプル2: すべてのサイトに管理者を追加
組織の管理者を全サイトに追加する例です。
# 接続
Connect-SPOService -Url https://組織名-admin.sharepoint.com
# 追加する管理者
$admin = "global-admin@組織名.onmicrosoft.com"
# すべてのサイトを取得
$sites = Get-SPOSite -Limit All
foreach ($site in $sites) {
Write-Host "処理中: $($site.Url)" -ForegroundColor Green
try {
Set-SPOUser -Site $site.Url `
-LoginName $admin `
-IsSiteCollectionAdmin $true
Write-Host "成功: $($site.Url)" -ForegroundColor Green
}
catch {
Write-Host "エラー: $($site.Url) - $_" -ForegroundColor Red
}
}
Write-Host "完了しました" -ForegroundColor Yellow
サンプル3: ストレージレポートの作成
すべてのサイトのストレージ使用状況をレポートする例です。
# 接続
Connect-SPOService -Url https://組織名-admin.sharepoint.com
# すべてのサイトを取得
$sites = Get-SPOSite -Limit All
# レポート用の配列
$report = @()
foreach ($site in $sites) {
$siteInfo = [PSCustomObject]@{
"URL" = $site.Url
"タイトル" = $site.Title
"所有者" = $site.Owner
"使用量(MB)" = $site.StorageUsageCurrent
"割当量(MB)" = $site.StorageQuota
"使用率(%)" = [math]::Round(($site.StorageUsageCurrent / $site.StorageQuota) * 100, 2)
"最終更新日" = $site.LastContentModifiedDate
}
$report += $siteInfo
}
# CSVにエクスポート
$report | Export-Csv -Path "C:\SharePointStorageReport.csv" -NoTypeInformation -Encoding UTF8
# 画面にも表示(使用率が高い順)
$report | Sort-Object "使用率(%)" -Descending | Format-Table
Write-Host "レポートを C:\SharePointStorageReport.csv に保存しました" -ForegroundColor Yellow
サンプル4: 外部共有が有効なサイトを検索
セキュリティチェックのために、外部共有が有効なサイトを検出する例です。
# 接続
Connect-SPOService -Url https://組織名-admin.sharepoint.com
# すべてのサイトを取得
$sites = Get-SPOSite -Limit All
# 外部共有が有効なサイトをフィルタ
$externalSharingSites = $sites | Where-Object {$_.SharingCapability -ne "Disabled"}
# 結果を表示
$externalSharingSites | Select Url, SharingCapability | Format-Table
# CSVにエクスポート
$externalSharingSites | Select Url, Title, Owner, SharingCapability | Export-Csv -Path "C:\ExternalSharingSites.csv" -NoTypeInformation -Encoding UTF8
Write-Host "外部共有が有効なサイト: $($externalSharingSites.Count) 件" -ForegroundColor Yellow
トラブルシューティング
よくある問題と解決方法を紹介します。
問題1: モジュールの読み込みエラー
エラーメッセージ:
Import-Module : 指定されたモジュール 'Microsoft.Online.SharePoint.PowerShell' は読み込まれませんでした
原因:
SharePoint Online Client Components SDKと競合しています。
解決方法:
SharePoint Online Client Components SDKをアンインストールします。
- コントロールパネルを開く
- プログラムと機能を開く
- 「SharePoint Online Client Components SDK」を探す
- アンインストール
- PowerShellを再起動
代替方法:
CSOM SDKが必要な場合は、NuGetパッケージとして取得します。
問題2: 接続エラー
エラーメッセージ:
Connect-SPOService : SharePoint Onlineに接続できませんでした
原因と解決方法:
原因1:URLが間違っている
正しいURLは「https://組織名-admin.sharepoint.com」です。
「-admin」を忘れないでください。
原因2:権限がない
SharePoint管理者またはグローバル管理者の権限が必要です。
管理者に権限を付与してもらってください。
原因3:多要素認証(MFA)が有効
-Credentialパラメータは使えません。
MFA対応の接続方法を使用してください。
Connect-SPOService -Url https://組織名-admin.sharepoint.com
問題3: PowerShell 7での実行エラー
エラーメッセージ:
モジュールを読み込めません
原因:
SharePoint Online管理シェルは、Windows PowerShell 5.1用に設計されています。
解決方法:
PowerShell 7で実行する場合は、-UseWindowsPowerShellパラメータを使用します。
Import-Module Microsoft.Online.SharePoint.PowerShell -UseWindowsPowerShell
または、Windows PowerShell 5.1を使用してください。
問題4: 実行ポリシーのエラー
エラーメッセージ:
このシステムではスクリプトの実行が無効になっているため、ファイルを読み込めません
解決方法:
実行ポリシーを変更します。
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Yを入力してEnterキーを押します。
問題5: コマンドレットが見つからない
エラーメッセージ:
'Get-SPOSite' は、認識されません
原因:
モジュールがインポートされていません。
解決方法:
手動でモジュールをインポートします。
Import-Module Microsoft.Online.SharePoint.PowerShell
または、SharePoint Online Management Shellを起動してください。
ベストプラクティス
SharePoint Online管理シェルを効果的に使うためのヒントです。
1. 接続を確認してから実行
スクリプトの最初で接続を確認します。
try {
Get-SPOSite -Limit 1 -ErrorAction Stop | Out-Null
Write-Host "接続確認OK" -ForegroundColor Green
}
catch {
Write-Host "SharePoint Onlineに接続されていません" -ForegroundColor Red
Connect-SPOService -Url https://組織名-admin.sharepoint.com
}
2. エラーハンドリングを実装
try-catchでエラーを適切に処理します。
foreach ($site in $sites) {
try {
# 処理
Write-Host "成功: $($site.Url)" -ForegroundColor Green
}
catch {
Write-Host "エラー: $($site.Url)" -ForegroundColor Red
Write-Host $_.Exception.Message -ForegroundColor Red
}
}
3. 進捗を表示
大量のデータを処理する場合は、進捗を表示します。
$sites = Get-SPOSite -Limit All
$total = $sites.Count
$current = 0
foreach ($site in $sites) {
$current++
$percent = [math]::Round(($current / $total) * 100, 2)
Write-Host "[$current/$total] $percent% - $($site.Url)"
# 処理
}
4. 処理結果をログに記録
重要な操作は、ログファイルに記録します。
$logFile = "C:\Logs\SharePoint_$(Get-Date -Format 'yyyyMMdd_HHmmss').log"
function Write-Log {
param($Message)
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
"$timestamp - $Message" | Out-File -FilePath $logFile -Append
Write-Host $Message
}
Write-Log "スクリプト開始"
# 処理
Write-Log "スクリプト終了"
5. テスト環境で試す
本番環境で実行する前に、テスト環境で動作確認します。
特に削除系のコマンドは、必ずテストしてください。
6. WhatIfパラメータを使用
変更を実行せずに、何が起こるかを確認できます。
Remove-SPOSite -Identity https://組織名.sharepoint.com/sites/test -WhatIf
実際には削除されず、削除される内容だけが表示されます。
7. 定期実行を自動化
Windows タスクスケジューラでスクリプトを定期実行します。
スクリプト例:
# 認証情報を安全に保存(初回のみ実行)
Get-Credential | Export-Clixml -Path "C:\Secure\SPOCredential.xml"
# スクリプト本体
$credential = Import-Clixml -Path "C:\Secure\SPOCredential.xml"
Connect-SPOService -Url https://組織名-admin.sharepoint.com -Credential $credential
# 処理
よくある質問
Q1: SharePoint Online管理シェルは無料ですか?
A: はい、無料です。
SharePoint Online(Microsoft 365)のライセンスがあれば、追加費用なしで使用できます。
Q2: Windows以外のOSで使えますか?
A: SharePoint Online管理シェルは、Windows専用です。
Mac/LinuxでSharePointを管理するには、PnP PowerShellを使用してください。
Q3: SharePoint管理者権限は必須ですか?
A: はい、SharePoint Online管理シェルを使うには、SharePoint管理者またはグローバル管理者の権限が必要です。
一般ユーザーは接続できません。
Q4: サイト内のリストやアイテムは操作できますか?
A: いいえ、SharePoint Online管理シェルでは、サイトコレクションレベルまでしか操作できません。
リストやアイテムを操作するには、PnP PowerShellまたはCSOMを使用してください。
Q5: 複数のテナントを同時に管理できますか?
A: いいえ、1つのPowerShellセッションで接続できるのは1つのテナントだけです。
別のテナントに接続すると、前の接続は自動的に切断されます。
Q6: コマンドの実行履歴は確認できますか?
A: はい、PowerShellの履歴機能を使います。
Get-History
すべての実行したコマンドが表示されます。
Q7: エラーが発生したらどうすればいいですか?
A: まず、エラーメッセージを確認します。
エラーの詳細を表示するには:
$Error[0] | Format-List -Force
最新のエラーの詳細が表示されます。
Q8: スクリプトの実行速度を上げる方法は?
A: 以下の方法があります:
- 必要なデータだけを取得(-Filterパラメータを使用)
- 並列処理を使用(PowerShell 7のForEach-Object -Parallel)
- 不要なプロパティは取得しない(Selectで必要な列だけ指定)
まとめ
SharePoint Online管理シェルは、SharePoint Onlineを効率的に管理するための強力なツールです。
主な利点:
- 大量の作業を自動化できる
- 手作業によるミスを削減できる
- 管理センターにない機能を使える
- レポート作成が簡単
- スケジュール実行で定期作業を自動化
インストール方法:
PowerShellギャラリーからインストールするのが最も簡単です。
Install-Module -Name Microsoft.Online.SharePoint.PowerShell
接続方法:
MFAが有効な環境では、以下のコマンドで接続します。
Connect-SPOService -Url https://組織名-admin.sharepoint.com
主な用途:
- サイトコレクションの作成・管理
- ユーザーと権限の管理
- テナント設定の変更
- ストレージとクォータの管理
- レポート作成
制限事項:
- サイト内のコンテンツ(リスト、アイテム)は管理できない
- SharePoint管理者権限が必要
- Windows専用
より高度な操作が必要な場合は、PnP PowerShellの使用を検討してください。
SharePoint Online管理シェルを活用して、SharePoint Onlineの管理作業を効率化しましょう!


コメント