Microsoft Graph PowerShell SDKとは?PowerShellでM365を管理! の詳細な説明を含む記事
はじめに:Microsoft 365 管理の現状とPowerShellの役割
Microsoft 365は、今日のビジネスに不可欠なクラウドサービス群です。Exchange Online、SharePoint Online、Teams、OneDrive for Business、Azure Active Directory(現 Microsoft Entra ID)など、多岐にわたるサービスが連携し、生産性向上を支えています。しかし、これらのサービスを日々管理するIT管理者は、ユーザーアカウントの作成・削除、ライセンスの割り当て、グループ設定、セキュリティポリシーの適用など、多くのタスクに直面します。
これらの管理タスクは、Microsoft 365管理センターのGUI(Graphical User Interface)で行うこともできます。小規模な組織や単一のタスクであれば、GUIは直感的で分かりやすい方法です。しかし、多数のユーザーを一度に処理する場合や、定型的な作業を繰り返し行う必要がある場合、GUIでの手作業は非常に時間がかかり、ヒューマンエラーのリスクも伴います。
ここで、PowerShellが登場します。PowerShellは、Microsoftが開発したクロスプラットフォームのタスク自動化および構成管理フレームワークです。コマンドラインインターフェース(CLI)とスクリプト言語を組み合わせることで、複雑なタスクを自動化し、大量の処理を効率的に実行できます。Microsoft 365の管理においても、PowerShellは不可欠なツールとなっています。これまで、Exchange Online、SharePoint Online、Skype for Business Online(現在はTeamsに統合)、Azure Active Directoryなどの個別のサービスに対して、それぞれ専用のPowerShellモジュールが提供されてきました。
これらの専用モジュールは強力でしたが、サービスごとに異なるコマンドレット体系や認証方法を使用する必要があり、複数のサービスを横断する管理タスクを実行する際には複雑さが増すという課題がありました。例えば、「ある部署の全ユーザーに対し、特定のMicrosoft 365グループに追加し、特定のSharePointサイトへのアクセス権限を付与し、Teamsの特定のチームに参加させる」といったシナリオでは、AzureADモジュール(またはMSOnlineモジュール)、SharePoint Onlineモジュール、Teamsモジュールを組み合わせて使用する必要があり、それぞれの接続やコマンドレットを理解していなければなりませんでした。
このような背景から、より統合された管理インターフェースの必要性が高まりました。そこで登場したのが「Microsoft Graph」です。
Microsoft Graphとは?
Microsoft Graphは、Microsoft 365、Windows 10、Enterprise Mobility + Security(EMS)などのMicrosoftクラウドサービス全体にわたるデータとインテリジェンスにアクセスするための、単一のエンドポイントを提供するRESTful Web APIです。ユーザー、グループ、メール、カレンダー、ファイル、デバイスなど、様々なリソース間の関係性を「グラフ」として表現し、これらのリソースに対して統一的な方法でアクセス、操作することができます。
Microsoft Graphを利用することで、開発者はMicrosoft 365のデータを活用したアプリケーションを構築できます。例えば、ユーザーのカレンダー情報に基づいて会議をスケジュールしたり、OneDrive上のファイルを操作したり、Teamsのチャットメッセージを処理したりといったことが可能です。
そして、このMicrosoft GraphをPowerShellから利用するための公式な手段として提供されているのが、「Microsoft Graph PowerShell SDK」なのです。
Microsoft Graph PowerShell SDKとは?
Microsoft Graph PowerShell SDKは、Microsoft Graph APIを利用するためのPowerShellモジュール群です。従来のサービス別モジュール(MSOnline, AzureAD, Exchange Onlineなど)が特定のサービスAPIに依存していたのに対し、Microsoft Graph PowerShell SDKは、Microsoft Graph APIという単一のAPIエンドポイントを通じて、Microsoft 365全体のさまざまなデータや機能にアクセスすることを目的としています。
このSDKを利用することで、PowerShellスクリプトからMicrosoft Graphのあらゆる機能を呼び出すことができるようになります。これにより、従来のサービス横断的な管理シナリオがより簡単に、より効率的に記述できるようになります。
Microsoft Graph PowerShell SDKの主な特徴と利点:
- 統合された管理体験: Microsoft Graph APIを基盤としているため、ユーザー、グループ、デバイス、アプリケーション、サービス設定など、異なるリソースタイプに対して統一されたコマンドレット体系でアクセスできます。サービスごとに異なるモジュールをロードし、異なる認証方法を使う必要がなくなります(ただし、一部の高度なExchange Online設定など、まだGraph APIで完全にカバーされていない機能については、引き続き専用モジュールが必要な場合もあります)。
- Microsoft Graphの全ての機能へのアクセス: v1.0エンドポイントだけでなく、将来的にベータエンドポイントの機能にも容易にアクセスできるよう設計されています。新しい機能がGraph APIに追加されれば、SDKのアップデートを通じてPowerShellからも利用可能になります。
- モジュール構造: Microsoft Graph PowerShell SDKは、
Microsoft.Graph
というメインモジュールと、ユーザー、グループ、ディレクトリなどのリソースタイプに応じた多数のサブモジュールで構成されています。これにより、必要な機能だけをインポートしてメモリ使用量を抑えることができます。 - 認証フローのサポート: 対話型認証、証明書ベース認証、シークレットベース認証など、様々な認証フローをサポートしており、インタラクティブな操作から自動化されたスクリプトまで幅広く対応できます。
- クロスプラットフォーム: PowerShell Coreに対応しており、WindowsだけでなくmacOSやLinux上でも動作します。
従来のMSOnlineやAzureADモジュールは、主にAzure Active Directory(現 Microsoft Entra ID)のリソース管理に特化していましたが、それぞれベースとなるAPI(Azure AD Graph APIまたはMicrosoft Graph APIの一部)が異なり、機能の重複や不足がありました。Microsoft Graph PowerShell SDKは、これらのモジュールを置き換え、Microsoft Graph APIへの統一的なアクセスを提供することを目指しています。Microsoftは、Azure ADモジュールとMSOnlineモジュールを段階的に廃止し、Microsoft Graph PowerShell SDKへの移行を推奨しています。
SDKのインストールとセットアップ
Microsoft Graph PowerShell SDKを使用するには、まずPowerShell環境にモジュールをインストールする必要があります。
前提条件:
- PowerShellのバージョン: PowerShell 5.1以降 (Windowsの場合) または PowerShell Core 7.0以降 (Windows, macOS, Linuxの場合) が推奨されます。PowerShell 5.1はWindows 10以降にデフォルトでインストールされています。PowerShell Coreは以下のドキュメントを参照してインストールしてください。
- NuGetプロバイダー: モジュールインストールにはNuGetプロバイダーが必要です。通常は自動的にインストールされますが、必要に応じて手動でインストールまたは更新できます。
モジュールのインストール:
PowerShellを管理者として実行し、以下のコマンドを実行します。
powershell
Install-Module -Name Microsoft.Graph -Scope CurrentUser
-Name Microsoft.Graph
: インストールするモジュール名を指定します。-Scope CurrentUser
: 現在のユーザーのプロファイルにモジュールをインストールします。これにより、管理者権限なしでインストールできます。すべてのユーザーに対してインストールする場合は-Scope AllUsers
を使用します(管理者権限が必要です)。
インストール中にNuGetプロバイダーのインストールを求められたり、信頼されていないリポジトリからのインストールについて警告が表示される場合があります。プロンプトに従って「Y」または「A」(Yes to All)を入力して続行してください。
特定のサブモジュールのみをインストールすることも可能です。例えば、ユーザーとグループの管理だけが必要な場合は、Microsoft.Graph.Users
とMicrosoft.Graph.Groups
サブモジュールをインストールします。
powershell
Install-Module -Name Microsoft.Graph.Users -Scope CurrentUser
Install-Module -Name Microsoft.Graph.Groups -Scope CurrentUser
ただし、どのサブモジュールが必要になるか事前に判断が難しい場合や、広範な管理を行いたい場合は、メインモジュールMicrosoft.Graph
をインストールするのが最も簡単です。メインモジュールをインストールすると、利用可能なすべてのサブモジュールがダウンロードされ、必要に応じて自動的にロードされるようになります。
インストールされているモジュールの確認:
インストールが完了したことを確認するには、以下のコマンドを実行します。
powershell
Get-InstalledModule -Name Microsoft.Graph -Scope CurrentUser
サブモジュールを確認する場合は、ワイルドカードを使用できます。
powershell
Get-InstalledModule -Name Microsoft.Graph.* -Scope CurrentUser
モジュールの更新:
新しいバージョンがリリースされた場合、以下のコマンドで更新できます。
powershell
Update-Module -Name Microsoft.Graph -Scope CurrentUser
プレビュー版モジュールについて:
Microsoft Graph APIには、v1.0
エンドポイントとbeta
エンドポイントがあります。SDKはデフォルトでv1.0
エンドポイントを使用しますが、プレビュー版モジュールをインストールすることでbeta
エンドポイントの機能を利用できます(ただし、プロダクション環境での利用は推奨されません)。
プレビュー版モジュールをインストールするには、-AllowPrerelease
パラメータを指定します。
powershell
Install-Module -Name Microsoft.Graph -AllowPrerelease -Scope CurrentUser
v1.0
版とbeta
版の両方をインストールして共存させることも可能ですが、使用する際はどちらのバージョンをロードするか注意が必要です。通常はプロダクション利用の場合はプレビュー版はインストールせず、v1.0
版のみを使用します。
接続と認証
Microsoft Graph PowerShell SDKを使用してMicrosoft 365環境にアクセスするには、認証が必要です。Connect-MgGraph
コマンドレットを使用して接続します。
Connect-MgGraph
コマンドレットは、様々な認証方法をサポートしています。一般的なのは対話型認証(ユーザーがブラウザでサインインする方法)ですが、自動化されたスクリプトでは証明書ベース認証やシークレットベース認証が使用されます。
1. 対話型認証 (Interactive Authentication):
最もシンプルで、テストや手動実行に適した方法です。コマンドを実行すると、Webブラウザが開いてMicrosoft 365のサインイン画面が表示され、ユーザーが資格情報を入力してサインインします。サインインが成功すると、PowerShellセッションが認証されます。
powershell
Connect-MgGraph
このコマンドだけを実行すると、デフォルトのスコープ(権限)であるUser.Read
(サインインユーザーの基本情報読み取り)とDirectory.AccessAsUser.All
(サインインユーザーとしてディレクトリにアクセス)で接続が試みられます。
必要なスコープ(権限)の指定:
Microsoft Graph APIは、アクセスするデータや実行する操作の種類に応じて、細かく権限が定義されています。これらの権限は「スコープ」と呼ばれます。例えば、ユーザー一覧を取得するにはUser.Read.All
またはDirectory.Read.All
スコープが必要です。ユーザーを作成、更新、削除するにはUser.ReadWrite.All
またはDirectory.ReadWrite.All
スコープが必要です。
Connect-MgGraph
コマンドレットでは、-Scopes
パラメータを使用して、接続に必要なスコープを指定できます。複数のスコープを指定する場合は、カンマ区切りの文字列配列で指定します。
powershell
Connect-MgGraph -Scopes "User.Read.All", "Group.ReadWrite.All"
このコマンドを実行すると、指定したスコープを許可するかどうかの同意画面がブラウザに表示される場合があります。これは、アプリケーション(この場合はPowerShellセッション)が指定された操作を実行するために、ユーザーの許可を求めているためです。管理者の同意が必要なスコープの場合は、管理者アカウントでサインインするか、事前に管理者がアプリケーションに同意を与える必要があります。
必要なスコープの特定方法:
実行したいコマンドレットが必要とするスコープを知るには、以下の方法があります。
- Microsoft Graphドキュメントを参照する: Microsoft Graphの公式ドキュメントには、各APIエンドポイントが必要とする権限(スコープ)が記載されています。Cmdlet名から対応するAPIエンドポイントを探し、必要なスコープを確認します。
Find-MgGraphCommand
コマンドレットを使用する: SDKには、特定のAPIパスに対応するCmdletや、特定のCmdletが必要とするスコープを検索するためのFind-MgGraphCommand
コマンドレットが用意されています。- 例:ユーザー一覧を取得するCmdlet (
Get-MgUser
) が必要とするスコープを調べる。
powershell
Find-MgGraphCommand -Command Get-MgUser | Select-Object -ExpandProperty Permissions - 例:
/users
パスに対するGETリクエストに対応するCmdletと必要なスコープを調べる。
powershell
Find-MgGraphCommand -Uri "/users" -Method Get | Select-Object -ExpandProperty Permissions
Find-MgGraphCommand
の出力には、委任された権限(Delegated)とアプリケーション権限(Application)の両方が表示されます。対話型認証では通常、委任された権限を使用します。自動化されたスクリプトでサービスプリンシパルとして実行する場合は、アプリケーション権限を使用します。
- 例:ユーザー一覧を取得するCmdlet (
接続状態の確認:
接続が成功したかどうか、および現在接続に使用されているアカウントとスコープを確認するには、以下のコマンドを使用します。
powershell
Get-MgContext
出力には、AccountId (サインインしたユーザーまたはアプリケーションのID)、TenantId (接続先のテナントID)、Scopes (現在有効なスコープ) などが表示されます。
2. アプリケーション認証 (証明書またはシークレット):
自動化されたスクリプトやバックグラウンドプロセスでは、ユーザーの介入なしに接続できるアプリケーション認証が適しています。これには、Azure AD (現 Microsoft Entra ID) にアプリケーション登録を作成し、適切なAPI権限(アプリケーション権限)を付与する必要があります。アプリケーション認証では、特定のユーザーとしてではなく、アプリケーション自体としてGraph APIにアクセスします。
- Azure AD (Microsoft Entra ID) アプリケーション登録の作成:
- Azure Portal (または Entra Portal) にサインインします。
- “Azure Active Directory” (または “Microsoft Entra ID”) サービスに移動します。
- “アプリの登録” を選択し、”新規登録” をクリックします。
- アプリケーション名を入力し、サポートされているアカウントの種類を選択します(通常は「この組織ディレクトリ内のアカウントのみ」)。リダイレクトURIは、アプリケーション認証では不要です。
- 登録後、アプリケーションの “アプリケーション (クライアント) ID” と “ディレクトリ (テナント) ID” を控えておきます。
- API権限の付与:
- 登録したアプリケーションのページで、”API のアクセス許可” を選択します。
- “アクセス許可の追加” をクリックし、”Microsoft Graph” を選択します。
- 必要な権限を選択します。”アプリケーションのアクセス許可” を選択し、アプリケーションとして実行する操作に必要な権限(例:
User.Read.All
,Group.ReadWrite.All
など)をチェックします。 - “アクセス許可の追加” をクリックします。
- 重要: アプリケーション権限は管理者の同意が必要です。”管理者の同意を与えます (テナント名)” をクリックします。同意が完了すると、権限の状態が「テナント名に管理者の同意を与えました」となります。
- 認証情報の準備:
- 証明書: アプリケーション登録の “証明書とシークレット” から証明書をアップロードし、そのサムプリント(Thumbprint)または秘密鍵ファイル(.pfx)を使用します。証明書認証はセキュリティが推奨される方法です。
- クライアントシークレット: アプリケーション登録の “証明書とシークレット” から新しいクライアントシークレットを生成します。生成されたシークレットの値は一度しか表示されないため、安全な場所に控えておく必要があります。
証明書ベース認証での接続:
“`powershell
証明書のサムプリントを使用する場合
$tenantId = “あなたのテナントID”
$clientId = “あなたのアプリケーション(クライアント)ID”
$certificateThumbprint = “あなたの証明書のサムプリント”
Connect-MgGraph -TenantId $tenantId -ClientId $clientId -CertificateThumbprint $certificateThumbprint -Scopes “User.Read.All”, “Group.ReadWrite.All” # 必要なスコープを指定
“`
“`powershell
秘密鍵ファイル (.pfx) を使用する場合
$tenantId = “あなたのテナントID”
$clientId = “あなたのアプリケーション(クライアント)ID”
$certificatePath = “C:\path\to\your\certificate.pfx”
$certificatePassword = “証明書のパスワード” # パスワードがない場合は不要
Connect-MgGraph -TenantId $tenantId -ClientId $clientId -CertificatePath $certificatePath -CertificatePassword $certificatePassword -Scopes “User.Read.All”, “Group.ReadWrite.All” # 必要なスコープを指定
“`
シークレットベース認証での接続:
“`powershell
$tenantId = “あなたのテナントID”
$clientId = “あなたのアプリケーション(クライアント)ID”
$clientSecret = “あなたのクライアントシークレット” # シークレットは安全に管理すること!
Connect-MgGraph -TenantId $tenantId -ClientId $clientId -ClientSecret $clientSecret -Scopes “User.Read.All”, “Group.ReadWrite.All” # 必要なスコープを指定
“`
シークレットをスクリプトファイルに直接記述するのはセキュリティ上推奨されません。Azure Key Vaultに保存してPowerShellから安全に取得したり、PowerShellの秘密鍵管理機能を利用したりすることを検討してください。
接続の切断:
作業が終了したら、以下のコマンドで接続を切断できます。これにより、セッションに関連付けられた認証情報がクリアされます。
powershell
Disconnect-MgGraph
基本的なGraph PowerShellコマンドレット
Microsoft Graph PowerShell SDKのコマンドレットは、Graph APIのリソースと操作に対応するように設計されています。基本的な命名規則は以下のようになっています。
Verb-MgNoun
- Verb (動詞): 実行する操作を示します (例:
Get
(取得),New
(作成),Update
(更新),Remove
(削除),Add
(追加),Remove
(削除),Invoke
(実行))。 - -Mg: Microsoft Graph SDKのCmdletであることを示すプレフィックスです。
- Noun (名詞): 操作対象となるリソースのタイプを示します (例:
User
,Group
,Device
,Team
など)。Graph APIのリソースパスにほぼ対応しています(例:/users
->MgUser
,/groups
->MgGroup
,/devices
->MgDevice
,/teams
->MgTeam
)。
ただし、リソースのサブプロパティや関連リソースに対する操作は、名詞部分に階層構造や関連性を示す要素が含まれる場合があります。例えば、ユーザーの写真を取得するCmdletはGet-MgUserPhoto
、グループのメンバーを追加するCmdletはAdd-MgGroupMember
となります。これは、Graph APIのパス構造 /users/{id}/photo
や /groups/{id}/members/$ref
に対応しています。
それでは、いくつかの一般的な管理タスクにおけるコマンドレットを見ていきましょう。
1. ユーザー管理
ユーザーはMicrosoft 365における最も基本的なリソースです。ユーザーアカウントの作成、情報の更新、削除、ライセンスの割り当てなどが頻繁に行われます。
-
ユーザーの一覧取得:
Get-MgUser
コマンドレットを使用します。デフォルトでは一部のプロパティのみが返されます。powershell
Get-MgUser # テナントの全ユーザー(一部プロパティ)
Get-MgUser -UserId "[email protected]" # 特定ユーザーをユーザープリンシパル名(UPN)で取得
Get-MgUser -UserId "ユーザーオブジェクトID" # 特定ユーザーをオブジェクトIDで取得Get-MgUser
は、大量のユーザーがいる場合、一度にすべての結果を返しません(ページネーション)。すべてのユーザーを取得するには-All
パラメータを使用します。powershell
Get-MgUser -All -
ユーザープロパティの選択とフィルタリング:
取得するプロパティを指定するには-Select
パラメータを使用します。カンマ区切りで指定します。powershell
Get-MgUser -All -Select "id", "displayName", "userPrincipalName", "jobTitle" | Format-Table特定の条件に一致するユーザーを検索するには
-Filter
パラメータを使用します。ODataクエリ構文を使用します。“`powersേരി
表示名が ‘Admin’ を含むユーザーを検索
Get-MgUser -Filter “displayName surgical ‘Admin'” -All | Select-Object displayName, userPrincipalName
有効なアカウント(accountEnabled eq true)で、部署が ‘Sales’ のユーザーを検索
Get-MgUser -Filter “accountEnabled eq true and department eq ‘Sales'” -All | Select-Object displayName, userPrincipalName, department, accountEnabled
“`
フィルタリング可能なプロパティはGraph APIのドキュメントを参照してください。多くの単純なプロパティはフィルタリング可能ですが、複雑なプロパティ(例: assignedLicenses)ではフィルタリングできません。 -
複雑なプロパティの展開:
一部のプロパティは、デフォルトではIDの参照などしか含まれていません。詳細な情報を取得するには、-ExpandProperty
パラメータを使用して展開する必要があります。例えば、ユーザーに割り当てられているライセンス情報を取得するには、assignedLicenses
プロパティを展開します。powershell
Get-MgUser -UserId "[email protected]" -ExpandProperty "assignedLicenses" | Select-Object -ExpandProperty assignedLicenses
この例では、assignedLicenses
プロパティを展開した後、さらにSelect-Object -ExpandProperty
を使用して、assignedLicenses
配列内の各ライセンスの詳細(SkuIdなど)を表示しています。 -
ユーザーの作成:
New-MgUser
コマンドレットを使用します。必要なパラメータ(例:AccountEnabled
,DisplayName
,MailNickname
,UserPrincipalName
,PasswordProfile
など)を指定します。“`powershell
$PasswordProfile = @{ Password = “YourInitialPassword1!”; ForceChangePasswordNextSignIn = $true }New-MgUser -AccountEnabled -DisplayName “新しい ユーザー” -MailNickname “newuser” -UserPrincipalName “[email protected]” -PasswordProfile $PasswordProfile -Department “IT” -JobTitle “IT Support”
``
-PasswordProfileパラメータはハッシュテーブルで指定します。
ForceChangePasswordNextSignIn = $true`は、ユーザーが次回サインイン時にパスワード変更を強制されるように設定します。 -
ユーザー情報の更新:
Update-MgUser
コマンドレットを使用します。更新するユーザーのオブジェクトIDまたはUPNを-UserId
で指定し、更新したいプロパティとその新しい値をパラメータで指定します。powershell
Update-MgUser -UserId "[email protected]" -JobTitle "Senior IT Support" -OfficeLocation "Building A" -
ユーザーの削除:
Remove-MgUser
コマンドレットを使用します。削除するユーザーのオブジェクトIDまたはUPNを-UserId
で指定します。確認プロンプトが表示されます。powershell
Remove-MgUser -UserId "[email protected]"
確認プロンプトを表示させたくない場合は、-Confirm:$false
パラメータを追加します(自動化スクリプトで注意して使用してください)。 -
ユーザーの復元(論理削除からの復旧):
削除されたユーザーは、デフォルトで30日間は論理削除状態となり、復元可能です。論理削除されたユーザーを取得するにはGet-MgDirectoryDeletedItem
コマンドレットを使用し、復元するにはRestore-MgDirectoryDeletedItem
コマンドレットを使用します。“`powershell
論理削除されたユーザー一覧を取得
Get-MgDirectoryDeletedItem -DirectoryObjectId “ユーザーオブジェクトID” | Where-Object Type -eq “Microsoft.Graph.User” | Select-Object Id, DisplayName
特定の論理削除されたユーザーを復元
Restore-MgDirectoryDeletedItem -DirectoryObjectId “論理削除されたユーザーのオブジェクトID”
“`
2. グループ管理
Microsoft 365グループ、セキュリティグループなどの管理を行います。
-
グループの一覧取得:
Get-MgGroup
コマンドレットを使用します。デフォルトでは一部のプロパティのみが返されます。全グループを取得するには-All
パラメータを使用します。powershell
Get-MgGroup -All
Get-MgGroup -GroupId "グループオブジェクトID" # 特定グループをオブジェクトIDで取得
Get-MgGroup -Filter "displayName eq 'Sales Team'" # 表示名でフィルタリング
Get-MgGroup -Filter "mailNickname eq 'sales'" # メールニックネームでフィルタリンググループタイプ(Microsoft 365またはSecurity)でフィルタリングすることも可能です。
powershell
Get-MgGroup -Filter "groupTypes/any(c:c eq 'Unified')" -All # Microsoft 365 グループ
Get-MgGroup -Filter "securityEnabled eq true and groupTypes/any(c:c eq 'Unified') -not" -All # セキュリティグループ (M365ではないもの) -
グループの作成:
New-MgGroup
コマンドレットを使用します。必要なパラメータ(例:DisplayName
,MailEnabled
,MailNickname
,SecurityEnabled
,Visibility
,GroupTypes
など)を指定します。“`powershell
Microsoft 365 グループを作成
$GroupParams = @{
DisplayName = “新しい M365 グループ”
MailEnabled = $true
MailNickname = “newm365group”
SecurityEnabled = $false
Visibility = “Private” # Public, Private, HiddenMembership
GroupTypes = @(“Unified”) # Microsoft 365 グループの場合は “Unified” を含む配列
}
New-MgGroup @GroupParamsセキュリティグループを作成
$GroupParams = @{
DisplayName = “新しい セキュリティ グループ”
MailEnabled = $false
MailNickname = “newsecuritygroup” # メールは有効でなくてもニックネームは必要
SecurityEnabled = $true
}
New-MgGroup @GroupParams
“` -
グループ情報の更新:
Update-MgGroup
コマンドレットを使用します。更新するグループのオブジェクトIDを-GroupId
で指定し、更新したいプロパティとその新しい値をパラメータで指定します。powershell
Update-MgGroup -GroupId "グループオブジェクトID" -DisplayName "更新された グループ名" -Description "このグループの説明を更新しました。" -
グループの削除:
Remove-MgGroup
コマンドレットを使用します。削除するグループのオブジェクトIDを-GroupId
で指定します。powershell
Remove-MgGroup -GroupId "グループオブジェクトID" -
グループメンバーの管理:
グループのメンバー(ユーザー、他のグループ、デバイスなど)や所有者を管理するためのコマンドレットがあります。-
メンバー一覧取得:
Get-MgGroupMember
コマンドレットを使用します。デフォルトではIDのみが返されるため、ユーザーオブジェクトとして取得するには-ExpandProperty
や-ConsistencyLevel eventual -CountVariable count
と組み合わせて使用することが多いです(特にユーザーの場合)。“`powershell
グループのメンバー(ユーザーとして取得)
Get-MgGroupMember -GroupId “グループオブジェクトID” -Filter “microsoft.graph.user/id ne null” -ConsistencyLevel eventual -CountVariable membersCount -All | Select-Object displayName, userPrincipalName
``
-Filter “microsoft.graph.user/id ne null”はメンバーの中からユーザーのみを抽出するODataフィルタです。
-ConsistencyLevel eventual -CountVariable count`は、大規模なディレクトリでメンバーシップの変更が反映されるまでの遅延を考慮し、正確な件数取得とページングを可能にするためのパラメータで、特定のシナリオで必要になります。 -
メンバーの追加:
Add-MgGroupMember
コマンドレットを使用します。グループのオブジェクトIDと、追加するユーザーまたはグループのオブジェクトIDを-GroupId
と-DirectoryObjectId
で指定します。powershell
Add-MgGroupMember -GroupId "グループオブジェクトID" -DirectoryObjectId "ユーザーオブジェクトID" # ユーザーを追加
Add-MgGroupMember -GroupId "グループオブジェクトID" -DirectoryObjectId "別のグループオブジェクトID" # 別のグループを追加 -
メンバーの削除:
Remove-MgGroupMember
コマンドレットを使用します。グループのオブジェクトIDと、削除するメンバー(ユーザーまたはグループ)のオブジェクトIDを-GroupId
と-DirectoryId
で指定します。powershell
Remove-MgGroupMember -GroupId "グループオブジェクトID" -DirectoryId "ユーザーオブジェクトID" -
所有者一覧取得:
Get-MgGroupOwner
コマンドレットを使用します。通常、所有者はユーザーです。powershell
Get-MgGroupOwner -GroupId "グループオブジェクトID" -All | Select-Object displayName, userPrincipalName -
所有者の追加:
Add-MgGroupOwner
コマンドレットを使用します。グループのオブジェクトIDと、追加するユーザーのオブジェクトIDを-GroupId
と-DirectoryObjectId
で指定します。powershell
Add-MgGroupOwner -GroupId "グループオブジェクトID" -DirectoryObjectId "ユーザーオブジェクトID" -
所有者の削除:
Remove-MgGroupOwner
コマンドレットを使用します。グループのオブジェクトIDと、削除するユーザーのオブジェクトIDを-GroupId
と-DirectoryId
で指定します。powershell
Remove-MgGroupOwner -GroupId "グループオブジェクトID" -DirectoryId "ユーザーオブジェクトID"
-
3. デバイス管理
Intuneなどで管理されているデバイス情報を取得できます。
-
デバイスの一覧取得:
Get-MgDevice
コマンドレットを使用します。powershell
Get-MgDevice -All | Select-Object DisplayName, OperatingSystem, OperatingSystemVersion, IsCompliant, IsManaged, OwnerUserPrincipalName
4. アプリケーション管理
Azure AD (Microsoft Entra ID) に登録されているアプリケーション(サービスプリンシパル)情報を取得できます。
-
アプリケーション(サービスプリンシパル)の一覧取得:
Get-MgServicePrincipal
コマンドレットを使用します。powershell
Get-MgServicePrincipal -All | Select-Object DisplayName, AppId, ServicePrincipalType
5. ライセンス管理
Microsoft Graph APIは、ユーザーに割り当てられているライセンス情報を取得できますが、直接ライセンスを割り当てる主要な手段ではありません。ライセンスの割り当てや解除は、通常、Azure AD (Microsoft Entra ID) のグループベースライセンス機能を使用するか、引き続きMSOnlineまたはAzureADモジュール(Set-MsolUserLicense
またはSet-AzureADUserLicense
)を使用するのが一般的です。
Graph APIとSDKでは、ユーザーに割り当てられたライセンスの詳細(SkuIdなど)や、ライセンス割り当ての結果としてユーザーが持つサービスプラン(Exchange Online、SharePoint Onlineなど)を確認できます。
-
ユーザーのライセンス詳細取得:
Get-MgUserLicenseDetail
コマンドレットを使用します。powershell
Get-MgUserLicenseDetail -UserId "[email protected]" | Select-Object SkuPartNumber, ServicePlans -ExpandProperty ServicePlans
SkuPartNumber
はライセンスの種類(例:ENTERPRISEPACK
はMicrosoft 365 E3)を示し、ServicePlans
はライセンスに含まれる具体的なサービス(Exchange, SharePoint, Teamsなど)の状態を示します。
6. レポートと監査ログ
Microsoft Graph APIには、アクティビティレポートや監査ログにアクセスするためのエンドポイントも用意されており、SDKを通じてこれらの情報を取得できます。
-
Azure AD (Microsoft Entra ID) 監査ログの取得:
Get-MgAuditLogDirectoryAuditEvent
コマンドレットを使用します。サインインアクティビティやディレクトリ変更に関するログを取得できます。“`powershell
直近のディレクトリ監査イベントを取得
Get-MgAuditLogDirectoryAuditEvent -Top 10 | Format-List
特定の操作(例: ユーザー作成)に関する監査イベントをフィルタリング
Get-MgAuditLogDirectoryAuditEvent -Filter “activityDisplayName eq ‘Add user'” -All | Select-Object CreatedDateTime, ActivityDisplayName, InitiatedBy, TargetResources | Format-List
“`
高度な利用方法
Microsoft Graph PowerShell SDKをさらに効果的に活用するための高度なテクニックをいくつか紹介します。
1. フィルタリング (-Filter
) の詳細
Get-Mg*
コマンドレットの-Filter
パラメータは、Graph APIのODataクエリ構文を使用します。これにより、サーバー側でデータの絞り込みが行われるため、大量のデータを取得してPowerShell側でフィルタリングするよりも効率的です。
基本的なフィルタリング演算子:
* eq
: 等しい (equals)
* ne
: 等しくない (not equals)
* gt
: より大きい (greater than)
* ge
: より大きいか等しい (greater than or equal)
* lt
: より小さい (less than)
* le
: より小さいか等しい (less than or equal)
* and
: 論理積
* or
: 論理和
* not
: 否定
文字列の比較:
* startsWith(propertyName, 'string')
: 指定した文字列で始まる
* endsWith(propertyName, 'string')
: 指定した文字列で終わる (一部のプロパティのみ)
* contains(propertyName, 'string')
: 指定した文字列を含む (一部のプロパティのみ)
* surgical 'string'
(PowerShell SDK独自のサポート): 大文字小文字を区別しない部分一致検索
複雑なプロパティ(例: 配列や複合型)のフィルタリングは、特定の構文(例: any
演算子)を使用する必要があります。
“`powershell
部署が ‘IT’ または ‘HR’ のユーザー
Get-MgUser -Filter “department eq ‘IT’ or department eq ‘HR'” -All
UPNが特定の文字列で始まるユーザー
Get-MgUser -Filter “startsWith(userPrincipalName, ‘admin@’)” -All
assignedLicensesプロパティに特定のSkuIdを含むユーザー (これは複雑なフィルタリングの例であり、assignedLicensesは直接フィルタリングできないことが多いです。概念的な例として捉えてください。)
実際には assignedLicenses での直接フィルタリングは難しいため、データを取得後にPowerShell側でフィルタリングするのが一般的です。
例:
Get-MgUser -All -ExpandProperty assignedLicenses | Where-Object {$.assignedLicenses -ne $null -and $.assignedLicenses.SkuId -contains “あなたのSkuId”}
“`
利用可能なフィルタリング方法はリソースタイプによって異なります。常にMicrosoft Graph APIのドキュメントで対象リソースのフィルタリング可能なプロパティと構文を確認してください。
2. ページネーション (-All
, -Top
, -CountVariable
)
Graph APIは、大量の結果を一度に返さず、ページ分割して返します。PowerShell SDKは、このページネーションを自動的に処理するための便利な方法を提供します。
-
-All
: これを付けると、SDKが自動的に全てのページを繰り返し取得し、完全な結果セットを返します。最も一般的に使用されるパラメータです。powershell
$allUsers = Get-MgUser -All -
-Top <int>
: 返される結果の最大件数を指定します。最初のN件だけを取得したい場合に便利です。powershell
Get-MgUser -Top 10 # 最初の10ユーザーを取得 -
-CountVariable <string>
: 総件数を変数に格納します。ページングやフィルタリングが適用された後の、APIエンドポイントが報告する合計件数を取得できます。-All
と組み合わせて使用することもできます。正確な件数取得には、-ConsistencyLevel eventual
が必要になる場合があります。powershell
Get-MgUser -Filter "accountEnabled eq true" -ConsistencyLevel eventual -CountVariable activeUsersCount -All
Write-Host "有効なユーザー数: $($activeUsersCount)"
3. エラーハンドリング
PowerShellスクリプトでエラーが発生した場合に適切に対処するため、Try-Catchブロックを使用することを強く推奨します。Microsoft Graph APIからのエラーは、Microsoft.Graph.PowerShell.Models.OdataError
オブジェクトとして捕捉できます。
“`powershell
try {
# 存在しないユーザーを取得しようとしてエラーを発生させる例
Get-MgUser -UserId “[email protected]” -ErrorAction Stop
}
catch {
Write-Host “エラーが発生しました:”
Write-Host “エラータイプ: $($.Category)”
Write-Host “エラーメッセージ: $($.Exception.Message)”
# 特定の Graph API エラーコードをチェックする場合
if ($_.Exception -is [Microsoft.Graph.PowerShell.Models.OdataError]) {
$graphError = $_.Exception.Error
Write-Host "Graph Error Code: $($graphError.Code)"
Write-Host "Graph Error Message: $($graphError.Message)"
# 例: 権限不足の場合の処理
if ($graphError.Code -eq "InsufficientPermissions") {
Write-Host "エラー: 必要な権限がありません。"
Write-Host "必要なスコープを確認してください。"
}
}
}
``
-ErrorAction Stop`パラメータをCmdletに追加することで、通常は非終端エラーとなるGraph APIエラーを捕捉可能な終端エラーに変換できます。
4. 権限管理とセキュリティ
Microsoft Graph PowerShell SDKを使用する上で、権限管理は非常に重要です。
- 最小権限の原則: スクリプトやアプリケーションに必要な最小限のスコープ(権限)のみを要求・使用するようにします。広範な権限(例:
User.ReadWrite.All
)を安易に許可すると、意図しない操作やセキュリティリスクにつながる可能性があります。 - 委任された権限 vs アプリケーション権限:
- 委任された権限: ユーザーとしてGraph APIにアクセスします。実行できる操作は、接続に使用したユーザーが持つ権限と、接続時に指定したスコープの両方によって制限されます。対話型認証や、特定のユーザーの代理として操作する場合に使用します。
- アプリケーション権限: アプリケーション自体としてGraph APIにアクセスします。実行できる操作は、アプリケーションに付与されたアプリケーション権限によってのみ制限されます。バックグラウンドサービスや自動化スクリプトなど、ユーザーのサインインなしに実行する場合に使用します。アプリケーション権限は非常に強力になりうるため、付与には十分な注意が必要です。
- 同意フレームワーク (Consent Framework): Graph APIにアクセスするアプリケーション(PowerShellセッションを含む)が特定の権限を要求する際に、ユーザーまたは管理者がその要求を承認する仕組みです。委任された権限の場合、ユーザーが初めてアプリケーションを使用する際に同意を求められることがあります。アプリケーション権限の場合、管理者が明示的にアプリケーションに権限を付与する(管理者の同意を与える)必要があります。
- 資格情報の安全な管理: 証明書やクライアントシークレットなどのアプリケーション認証情報は、安全な場所に保管し、漏洩しないように厳重に管理してください。ハードコードは絶対に避けるべきです。
5. スクリプト化のヒント
- パラメータセット: 複数の入力を受け付けるCmdlet(例:
Get-MgUser
でUPNまたはObjectIDを受け付ける)は、パラメータセットを使用します。これはSDKの利用者が意識する必要は少ないですが、Cmdletのヘルプを確認する際に理解しておくと便利です。 -
パイプラインの使用: PowerShellの強力な機能であるパイプラインを活用し、Cmdletの出力を別のCmdletの入力として渡すことで、効率的な処理チェーンを構築できます。
“`powershell
部署が ‘Sales’ のユーザーを全て取得し、表示名とUPNのみを選択して表示
Get-MgUser -Filter “department eq ‘Sales'” -All | Select-Object DisplayName, UserPrincipalName
特定のグループの全メンバー(ユーザー)を取得し、CSVファイルにエクスポート
Get-MgGroupMember -GroupId “グループオブジェクトID” -Filter “microsoft.graph.user/id ne null” -ConsistencyLevel eventual -All | Select-Object displayName, userPrincipalName | Export-Csv -Path “C:\temp\group_members.csv” -NoTypeInformation
“` -
出力の整形とエクスポート:
Select-Object
,Format-List
,Format-Table
,Out-GridView
,Export-Csv
,ConvertTo-Json
などの標準的なPowerShell Cmdletを活用して、取得したデータを整形したり、ファイルに出力したりできます。
Graph Explorerとの連携
Graph Explorerは、Microsoft Graph APIを試すためのWebベースのツールです (https://developer.microsoft.com/en-us/graph/graph-explorer)。サインインしてAPIリクエスト(GET, POST, PATCH, DELETEなど)を送信し、その応答を確認できます。
Graph ExplorerでテストしたAPIリクエストは、PowerShell SDKのCmdletに変換することができます。Graph Explorerでリクエストを送信し、応答が表示されたら、”Code snippets” タブを開き、ドロップダウンで”PowerShell”を選択します。対応するPowerShell Cmdletとそのパラメータが表示されるので、これをスクリプトにコピー&ペーストして利用できます。
これは、特定の操作に対応するCmdletが分からない場合や、複雑なAPIパスやパラメータが必要な場合に、非常に役立つ機能です。また、必要なスコープを確認するのにも便利です。
従来のモジュールとの共存と移行
前述のように、Microsoft Graph PowerShell SDKは、従来のサービス別モジュール(特にMSOnlineやAzureAD)を置き換えることを目指しています。Microsoftは、これらの従来のモジュールの段階的な廃止を発表しています。
- MSOnlineモジュール: Azure AD Graph APIに基づいています。古いAPIであり、機能更新はほとんど行われていません。Microsoft Graph PowerShell SDKへの移行が強く推奨されています。
- AzureADモジュール: Microsoft Graph APIに基づいていますが、一部のCmdletは従来のAPIや異なる実装に依存している場合があります。機能の重複があり、SDKの方が新しい機能に対応していることが多いです。こちらもSDKへの移行が推奨されています。
共存:
一時的に、または特定の機能がまだGraph SDKで利用できない場合は、従来のモジュールとGraph SDKを同じPowerShellセッションで共存させる必要があるかもしれません。しかし、両方のモジュールが同じような機能(例: ユーザー管理)を提供するCmdletを持っている場合、Cmdletの名前が競合する可能性があります。
Cmdlet名の競合を避けるためには、モジュールをインポートする際に-Prefix
パラメータを使用する方法があります。
powershell
Import-Module AzureAD -Prefix AzureAD # AzureADモジュールのCmdletに AzureAD 接頭辞を付ける(例: Get-AzureADUser)
Import-Module Microsoft.Graph # Microsoft Graphモジュールをインポート
しかし、これは管理が煩雑になるため、可能な限りGraph SDKに統一していくのが理想です。
移行:
従来のモジュールからGraph SDKへの移行は、以下のステップで進めることを推奨します。
- 必要な操作の洗い出し: 現在使用しているスクリプトが、どの従来のCmdletを使用しているか、どのような操作を実行しているかを洗い出します。
- 対応するGraph SDK Cmdletの特定: 各従来のCmdletに対応するGraph SDKのCmdletを探します。多くの場合、Cmdlet名が似ていますが、パラメータ名や構文が異なることがあります。Graph Explorerや
Find-MgGraphCommand
が役立ちます。 - 必要なスコープの確認: 特定したGraph SDK Cmdletが必要とするスコープを確認します。アプリケーション認証を使用する場合は、アプリケーション登録にこれらのスコープ(アプリケーション権限)を付与し、管理者の同意を得る必要があります。委任された権限の場合も、スクリプトを実行するユーザーがこれらのスコープを許可されているか確認します。
- スクリプトの書き換え: 特定したGraph SDK Cmdletと必要なスコープを使って、従来のスクリプトを書き換えます。接続部分(
Connect-MgGraph
)やエラーハンドリングもGraph SDKに合わせて変更します。 - テスト: 書き換えたスクリプトをテスト環境で十分にテストします。特に、大量のデータを処理する場合や、重要な変更(作成、更新、削除)を含む場合は慎重なテストが必要です。
- 段階的な展開: 問題がなければ、本番環境に段階的に展開します。
まだGraph SDKで利用できない機能:
Microsoft Graph APIは常に進化していますが、一部の機能や設定はまだGraph APIで公開されていないか、機能が制限されている場合があります。例えば、Exchange Onlineの特定の詳細設定や、SharePoint Onlineサイトコレクションの高度な管理設定などは、引き続きExchange Online PowerShellモジュールやSharePoint Online Management Shellが必要になることがあります。
このような場合は、Graph SDKと従来のモジュールを組み合わせて使用するか、Graph APIの機能拡張を待つ必要があります。しかし、Microsoftの戦略はGraph APIへの統合を進める方向にあるため、将来的にはより多くの機能がGraph SDKで利用可能になると期待されます。
よくある問題とトラブルシューティング
Microsoft Graph PowerShell SDKの使用中に遭遇する可能性のある一般的な問題とその解決策をいくつか紹介します。
-
権限エラー (Insufficient privileges):
- 問題:
Operation: {Operation Name} was prohibited by policy. Reason: Insufficient privileges
または同様のエラーが表示される。 - 原因: 接続に使用したアカウント(ユーザーまたはアプリケーション)に、実行しようとしている操作に必要なGraph APIスコープが割り当てられていない。
- 解決策:
Get-MgContext
で現在有効なスコープを確認する。- 実行しようとしているCmdlet(または対応するGraph APIエンドポイント)が必要とするスコープを、Graphドキュメントまたは
Find-MgGraphCommand
で確認する。 Connect-MgGraph
で接続し直す際に、必要なスコープを-Scopes
パラメータで指定する。- アプリケーション認証を使用している場合は、Azure AD (Microsoft Entra ID) のアプリケーション登録で、必要なアプリケーション権限が付与されており、管理者の同意が得られていることを確認する。
- 委任された権限を使用している場合は、接続に使用したユーザーアカウントが、その操作を実行するための十分な役割やライセンスを持っているか確認する。
- 問題:
-
接続エラー:
- 問題:
Connect-MgGraph
コマンドが失敗する。 - 原因: ネットワーク接続の問題、認証情報の誤り、ファイアウォールやプロキシの設定など。
- 解決策:
- インターネット接続が正常か確認する。
- 入力したテナントID, クライアントID, シークレット, 証明書情報が正しいか再確認する。
- ファイアウォールやプロキシがGraph APIエンドポイント (
graph.microsoft.com
) へのアクセスをブロックしていないか確認する。 - 対話型認証の場合、ブラウザで直接サインインできるか確認する。
- PowerShellの実行ポリシーがモジュールのロードを許可しているか確認する (
Get-ExecutionPolicy
)。必要に応じてポリシーを変更する (Set-ExecutionPolicy
).
- 問題:
-
モジュールの競合:
- 問題: 従来のモジュールとGraph SDKで同じ名前のCmdletがあり、意図しない方のCmdletが実行される。
- 原因: 複数のモジュールが同じ名前のCmdletをエクスポートしている。
- 解決策:
- 可能な限り、使用するモジュールをGraph SDKに統一する。
- 一時的に両方必要な場合は、
Import-Module
の-Prefix
パラメータを使用してCmdlet名を区別する。 - 特定のCmdletを明示的に指定して実行する (
<ModuleName>\<CmdletName>
またはGet-Command -ModuleName <ModuleName> -Name <CmdletName> | Invoke-Command
)。 - 不要なモジュールはアンロードする (
Remove-Module
)。
-
API制限とスロットリング:
- 問題: 大量の操作を実行中にエラーが発生したり、処理速度が著しく低下したりする。
- 原因: Microsoft Graph APIにはサービス保護のしきい値があり、短時間に大量のリクエストを送信するとスロットリング(制限)される。
- 解決策:
- Microsoft Graph PowerShell SDKは、多くのCmdletでデフォルトで基本的なリトライメカニズムを内蔵しています。
- スクリプト内で、リトライ処理を実装する。エラーレスポンスに
Retry-After
ヘッダーが含まれている場合は、指定された時間待機してからリトライする。 - バッチ処理が可能な操作では、バッチリクエストを利用する(ただし、SDK Cmdletとして直接サポートされていない場合は、生のAPIリクエストを送信する必要がある)。
- 処理速度を意図的に遅くする (
Start-Sleep
)。 - 設計を見直し、並列処理を検討する(ただし、並列処理はスロットリングを引き起こしやすいため、適切な制御が必要)。
-
Graph APIのバージョン違い (v1.0 vs beta):
- 問題: ドキュメントで見つけた機能がCmdletにない、またはCmdletの動作がドキュメントと異なる。
- 原因: Microsoft Graph APIにはv1.0とbetaの2つのエンドポイントがあり、それぞれ利用可能な機能が異なる。SDKはデフォルトでv1.0エンドポイントを使用する。
- 解決策:
- 使用しているCmdletがv1.0エンドポイントに対応しているか確認する。
- betaエンドポイントの機能を使用したい場合は、プレビュー版のSDKモジュールをインストールし、
Select-MgProfile -Name beta
コマンドでbetaプロファイルに切り替える。 - プロダクション環境では、betaエンドポイントの利用は非推奨であることに注意する。
まとめ
Microsoft Graph PowerShell SDKは、Microsoft 365環境をPowerShellで管理するための強力かつモダンなツールです。従来のサービス別モジュールの課題を解決し、Microsoft Graph APIを介してユーザー、グループ、デバイス、サービス設定など、様々なリソースに対して統合されたアクセスを提供します。
このSDKを利用することで、IT管理者は日々の定型業務を効率化し、複雑な管理タスクを自動化できます。ユーザーの一括作成・更新、グループメンバーシップの管理、ライセンス状況のレポート作成など、GUIでは時間と手間がかかる作業も、PowerShellスクリプトとして記述し、実行することで迅速に行えます。
SDKの導入は、まずモジュールのインストールから始まります。そして、Connect-MgGraph
コマンドレットによる適切な認証(対話型認証、証明書認証、シークレット認証など)と、必要なスコープ(権限)の指定が重要です。管理したいリソースに応じて、Get-Mg*
, New-Mg*
, Update-Mg*
, Remove-Mg*
といった命名規則に従ったCmdletを使用します。
より高度なシナリオでは、-Filter
によるサーバー側でのデータ絞り込み、-All
パラメータによるページネーションの自動処理、Try-Catchブロックによるエラーハンドリングなどが不可欠になります。また、Graph Explorerを活用することで、必要なAPI操作に対応するPowerShell Cmdletを容易に特定できます。
従来のMSOnlineやAzureADモジュールからの移行は、Microsoftが推奨する方向性であり、将来的な管理の複雑さを軽減するために重要なステップです。移行は計画的に行い、必要な機能がGraph SDKで利用可能か確認しながら進める必要があります。
Microsoft 365の管理を効率化し、自動化の幅を広げたいと考えるすべてのIT管理者にとって、Microsoft Graph PowerShell SDKは習得必須のツールと言えるでしょう。Graph APIの豊富な機能とPowerShellの自動化能力を組み合わせることで、Microsoft 365環境をより効果的に管理することが可能になります。学習の際には、Microsoftの公式ドキュメント(Graph APIドキュメント、PowerShell SDKドキュメント)を積極的に活用することをお勧めします。これらのドキュメントには、利用可能なCmdlet、必要なスコープ、フィルタリング構文、具体的な例などが詳細に記載されています。
PowerShellを使ったMicrosoft 365管理の旅に、Microsoft Graph PowerShell SDKは強力な相棒となってくれるはずです。ぜひ、ご自身の環境でインストールし、試してみてください。