PowerShellでMicrosoft 365を管理しよう!PowerShell環境構築手順

音声で聞く

読む前にこの記事のポイントを音声で確認できます。この音声は本記事をもとにAIツール(NotebookLM)で自動生成したもので、発音や言い回しが不自然な箇所や、内容の誤りが含まれる可能性があります。理解の補助としてご利用ください。

Microsoft 365 のユーザー追加、ライセンスの割り当て、グループ管理などは、管理センターの GUI でも操作できます。ただ、同じ作業の繰り返しや大量の処理になると、PowerShell で自動化したくなります。この記事では、Microsoft 365 を PowerShell で管理するための環境として、Microsoft Graph PowerShell SDK をインストールし、テナントに接続して動作を確認するまでの手順をまとめます。

この記事でわかること
  1. Microsoft Graph PowerShell SDK の役割と、これまでのモジュールとの違い
  2. PowerShell 7 の準備と、モジュールのインストール
  3. Connect-MgGraph での接続(スコープと同意)と、Get-MgUser での確認

Microsoft Graph PowerShell SDKとは?

以前は、Microsoft 365(Microsoft Entra ID)を PowerShell で管理するのに「Azure AD PowerShell」や「MSOnline」のモジュールが使われていました。これらのモジュールは非推奨になっていて、現在は「Microsoft Graph PowerShell SDK」を使います。

Microsoft Graph PowerShell SDK は、Microsoft Graph API を呼び出すためのモジュール群です。Microsoft Graph API は、Entra ID のユーザーやグループだけでなく、Exchange、SharePoint、Teams などの Microsoft 365 サービスの API を 1 つのエンドポイント(窓口)にまとめたものです。そのため、1 回のサインインで、さまざまなサービスの情報を扱えます。

PowerShell 7Microsoft.Graphモジュール(Get-MgUser など)Microsoft Graph APIgraph.microsoft.com1つの窓口(REST API)Entra ID(ユーザー等)Exchange OnlineSharePoint OnlineMicrosoft Teams要求結果① Connect-MgGraph でサインインし、スコープに同意② アクセストークンを付けてGraph API を呼び出す
図1 Microsoft Graph PowerShell SDK と Microsoft Graph API の関係
項目Microsoft Graph PowerShell SDK
対応する PowerShellPowerShell 7 以降(推奨)。Windows PowerShell 5.1 でも使える
対応する OSWindows、macOS、Linux
コマンドの名前Get-AzureADUser → Get-MgUser のように「Mg」が付く
権限あらかじめ許可されておらず、使う権限(スコープ)を接続時に要求して同意する

セットアップの準備をしよう!

PowerShell で Microsoft 365 の管理を始めるために、次の 2 つを準備します。

準備するもの内容
PowerShell 7Windows 10/11 に最初から入っているのは Windows PowerShell 5.1 で、PowerShell 7 は別にインストールする。macOS や Linux でもインストールすれば使える
管理者のアカウントMicrosoft 365 テナントの管理者ロールを持つアカウント。この記事のように、権限(スコープ)に組織全体で同意する場合は、全体管理者など、同意を与えられるロールが必要

PowerShell 7 のインストール方法は、Microsoft の公式ドキュメントを参考にしてください。

Windows PowerShell 5.1 で使う場合

Windows PowerShell 5.1 で使うときは、.NET Framework 4.7.2 以降と最新の PowerShellGet が必要です。また、スクリプトの実行ポリシーを RemoteSigned 以下の制限にしておく必要があります(STEP 2 の補足)。

PowerShellを使ってMicrosoft365へ接続するまでの手順

Microsoft Graph PowerShell SDK をインストールし、Microsoft 365 に接続するまでの手順です。

PowerShell 7 を開く

Windows のスタートメニューで「PowerShell」と検索し、表示された PowerShell 7 (x64) を開きます。検証では、右側のメニューの「管理者として実行」で開きました。

次の STEP 2 のように、モジュールを自分のユーザーだけにインストールする(-Scope CurrentUser)場合は、管理者として開かなくてもインストールできます。すべてのユーザー向けにインストールする(-Scope AllUsers)場合は、管理者として開く必要があります。

補足

検索結果には「Windows PowerShell」も表示されますが、これは Windows に最初から入っている 5.1 です。PowerShell 7 とは別のもので、モジュールもそれぞれにインストールが必要です。

Microsoft Graph PowerShell SDKモジュールをインストールする

Microsoft 365 を管理するためのコマンド(コマンドレット)を使うには、まずモジュールをインストールします。PowerShell のウィンドウで次のコマンドを実行します。

PowerShell 7

Install-Module Microsoft.Graph -Scope CurrentUser
コマンド・パラメータ意味
Install-ModulePowerShell Gallery(PSGallery)からモジュールをインストールする
Microsoft.GraphMicrosoft Graph PowerShell SDK のモジュール(v1.0 の API 用)。インストールすると、ユーザー用、グループ用などのサブモジュールがまとめて入る
-Scope CurrentUser今のユーザーだけにインストールする。管理者権限は不要
-Scope AllUsersすべてのユーザーにインストールする。管理者権限が必要

実行すると、「Untrusted repository」(信頼されていないリポジトリ)と確認のメッセージが表示されます。インストール元の PSGallery は Microsoft が運営する公式のリポジトリですが、既定では「信頼されていない」設定になっているため、このメッセージが出ます。Y を入力して Enter キーを押し、インストールを続けます。

画面イメージについて

この記事の画面は、実際の画面ではなく、検証時の画面から見るポイントを抜き出して描いたイメージです。バージョンによって、項目の並びや表記は変わります。

Administrator: PowerShell 7 (x64)画面イメージ
PowerShell 7.5.11PS C:\Users\hirotano> Install-Module Microsoft.Graph -Scope CurrentUser 2Untrusted repositoryYou are installing the modules from an untrusted repository. If you trust this repository, change itsInstallationPolicy value by running the Set-PSRepository cmdlet. Are you sure you want to install the modules from'PSGallery'?3[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "N"): Y
図2 Install-Module の実行と確認メッセージ(実際の画面ではなく、表示内容のポイントを示したイメージです)
No.表示意味
1Install-Module …PowerShell 7.5.1 で、モジュールのインストールを実行した
2Untrusted repositoryインストール元の PSGallery が「信頼されていない」設定になっているので、続けるかを確認している
3(default is "N"): YY(Yes)を入力して続ける。何も入力せずに Enter を押すと、既定の N(No)になり、インストールされない

インストールが終わったら、Get-InstalledModule Microsoft.Graph でインストールされたバージョンを確認できます。

補足

Microsoft.Graph は 40 を超えるサブモジュールをまとめてインストールするので、時間がかかります。ユーザー管理だけなど、使う機能が決まっている場合は、Microsoft.Graph.Users のように必要なサブモジュールだけをインストールする方法もあります(接続に使う Microsoft.Graph.Authentication は自動でインストールされます)。

また、Windows PowerShell 5.1 で Install-Module やモジュールの読み込みがエラーになる場合は、実行ポリシー(Execution Policy)が制限されている可能性があります。実行ポリシーは、不正なスクリプトが実行されるのを防ぐための仕組みです。Get-ExecutionPolicy で現在の設定を確認し、Restricted になっていれば Set-ExecutionPolicy RemoteSigned -Scope CurrentUser で変更します。

Microsoft 365に接続する(Connect-MgGraph)

モジュールのインストールが終わったら、Microsoft 365 のテナントに接続します。接続には Connect-MgGraph を使います。

PowerShell 7

Connect-MgGraph -Scopes "User.Read.All", "Group.ReadWrite.All"

-Scopes には、このセッションで使いたい権限(スコープ)を指定します。この例で要求しているのは次の 2 つです。

スコープできること
User.Read.Allすべてのユーザーのプロフィールを読み取る(同意画面の「Read all users’ full profiles」)
Group.ReadWrite.Allすべてのグループを読み取り・変更する(同意画面の「Read and write all groups」)

セキュリティの面では、必要な権限だけを要求するのが基本です。たとえば、ユーザーの情報を読み取るだけなら User.Read.All だけで足ります。どのコマンドにどのスコープが必要かは、Microsoft のドキュメントの各コマンドのページで確認できます。

コマンドを実行すると Web ブラウザが起動し、Microsoft 365 のサインイン画面が表示されます。管理者のアカウントでサインインします。初めて接続するときや、要求するスコープが変わったときは、アクセス許可の同意画面が表示されます。

Microsoft サインイン(要求されているアクセス許可)画面イメージ
要求されているアクセス許可
1アプリMicrosoft Graph Command Line Tools
Microsoft Corporation
2このアプリで必要なアクセス許可Read all users’ full profiles
Read and write all groups
Maintain access to data you have given it access to
3組織の代理として同意する☑
キャンセル4承諾
図3 アクセス許可の同意画面(実際の画面ではなく、操作のポイントを示したイメージです)
No.項目内容
1アプリMicrosoft Graph PowerShell SDK は「Microsoft Graph Command Line Tools」というアプリとしてサインインする
2アクセス許可-Scopes で指定した 2 つと、アクセスを維持するための許可(サインインを続けるために使う)
3組織の代理として同意するチェックを入れると、組織の全ユーザーに代わって同意する。今回はテナント全体に同意する前提でチェックを入れる
4承諾クリックすると同意され、PowerShell の接続が完了する
補足

このサインインは、サインインしたユーザーの権限で操作する方式(委任されたアクセス)です。実際にできる操作は、同意したスコープと、サインインしたユーザーの管理者ロールの両方で決まります。スコープに同意していても、ユーザーのロールで許されていない操作はできません。

あとから別の権限が必要になった場合は、新しいスコープを付けて Connect-MgGraph をもう一度実行します。

接続を確認する

接続できたかを、簡単なコマンドで確認します。次のコマンドで、テナントに登録されているユーザーの一覧を取得します。

PowerShell 7

Get-MgUser
Administrator: PowerShell 7 (x64)画面イメージ
PS C:\Users\hirotano> Get-MgUser 1DisplayName Id                                   Mail----------- --                                   ----(ユーザーの情報は伏せています)
図4 Get-MgUser の実行結果(実際の画面ではなく、表示内容のポイントを示したイメージです)
No.表示意味
1DisplayName、Id、Mailユーザーの表示名、ID(オブジェクト ID)、メールアドレス。続けてユーザー プリンシパル名(UPN)なども表示される

ユーザーの一覧が表示されれば、接続は成功です。接続中のアカウントや同意済みのスコープは Get-MgContext で確認できます。作業が終わったら、Disconnect-MgGraph でサインアウトします。

補足

Get-MgUser をオプションなしで実行すると、結果の最初のページだけが返ります。ユーザーが多いテナントで全員を取得するには Get-MgUser -All とします。

また、サインインの情報(トークン)はキャッシュされるため、PowerShell を閉じても Disconnect-MgGraph を実行するまではサインインした状態が続きます。共用の端末では、作業の最後に必ずサインアウトします。

セットアップ後にできること

セットアップが終われば、Microsoft 365 のユーザーやグループの管理を中心に、多くの作業を PowerShell で行えます。たとえば、次のような作業です。

作業使うコマンドの例
新しいユーザーの作成New-MgUser
ユーザー情報の変更(役職、部署など)Update-MgUser
ユーザーの無効化・削除Update-MgUser -AccountEnabled:$false、Remove-MgUser
パスワードの変更Update-MgUser -PasswordProfile
グループの取得・管理Get-MgGroup、New-MgGroup
ライセンスの取得・割り当てGet-MgSubscribedSku、Set-MgUserLicense

どのコマンドも、実行には対応するスコープが必要です。たとえば、ユーザーを作成・変更するには User.ReadWrite.All を付けて接続し直します。

Exchange Online、SharePoint Online、Teams の設定をより細かく管理するには、Microsoft Graph PowerShell SDK だけでなく、それぞれのサービス用のモジュールを使う場合があります。

サービスモジュール接続コマンド
Exchange OnlineExchangeOnlineManagementConnect-ExchangeOnline
SharePoint OnlineMicrosoft.Online.SharePoint.PowerShellConnect-SPOService
Microsoft TeamsMicrosoftTeamsConnect-MicrosoftTeams

うまくいかないとき

状態よくある原因確認すること
-Scope AllUsers でインストールできないPowerShell を管理者として開いていない管理者として開き直すか、-Scope CurrentUser にする
インストールしたのにコマンドが見つからない別の PowerShell(Windows PowerShell 5.1 と PowerShell 7)にインストールした使う PowerShell で Get-InstalledModule Microsoft.Graph を実行する
Windows PowerShell 5.1 でモジュールを読み込めない実行ポリシーが RestrictedGet-ExecutionPolicy の結果
同意画面で承諾できない、管理者の承認が必要と表示される組織全体の同意を与えられるロールがないサインインしたアカウントの管理者ロール
コマンドで権限不足(Insufficient privileges)のエラーそのコマンドに必要なスコープを要求していないGet-MgContext のスコープ、コマンドのドキュメントの必要な権限

まとめ

手順コマンド・操作ポイント
STEP 1PowerShell 7 を開くWindows に最初から入っている 5.1 とは別。-Scope CurrentUser なら管理者として開かなくてよい
STEP 2Install-Module Microsoft.Graph -Scope CurrentUser「Untrusted repository」には Y で続ける
STEP 3Connect-MgGraph -Scopes "User.Read.All", "Group.ReadWrite.All"必要なスコープだけを要求し、同意画面で承諾する
STEP 4Get-MgUserユーザーの一覧が出れば接続成功。終わったら Disconnect-MgGraph

コメント