Microsoft 365 で PowerShell を使用する理由

この記事は、Microsoft 365 Enterprise および Office 365 Enterprise の両方に適用されます。

Microsoft 365 管理センターを使用すると、Microsoft 365 ユーザー アカウントとライセンスを管理できます。 また、Exchange Online、Teams、SharePoint などの Microsoft 365 サービスを管理することもできます。 代わりに PowerShell を使用してこれらのサービスを管理する場合は、コマンド ラインとスクリプト言語環境を利用して、速度、自動化、その他の機能を利用できます。

注:

Azure Active Directory モジュールは、Microsoft Graph PowerShell SDK に置き換えられます。 Microsoft Graph PowerShell SDK を使用して、すべての Microsoft Graph API にアクセスできます。 詳細については、「Microsoft Graph PowerShell SDK の使用を開始する」 を参照してください。 この記事の一部の PowerShell for Microsoft 365 コマンドは、Microsoft Graph PowerShell を使用するように更新されています。

この記事では、PowerShell を使用して Microsoft 365 を管理して次の操作を行う方法について説明します。

  • Microsoft 365 管理センターに表示されない追加情報を表示する

  • PowerShell でのみ可能な機能と設定を構成する

  • 一括操作を実行する

  • データをフィルター処理する

  • データの印刷または保存

  • サービス間で管理する

PowerShell for Microsoft 365 は、windows ベースのサービスとプラットフォームのコマンド ライン環境である、Windows PowerShell用のモジュールのセットであることに注意してください。 この環境では、追加のモジュールで拡張できるコマンド シェル言語が作成されます。 これは、単純または複雑なコマンドまたはスクリプトを実行する方法を提供します。 たとえば、PowerShell for Microsoft 365 モジュールをインストールし、Microsoft 365 サブスクリプションに接続した後、次のコマンドを実行して、Microsoft Exchange Onlineのすべてのユーザー メールボックスを一覧表示できます。

Get-Mailbox

また、Microsoft 365 管理センターを使用してメールボックスの一覧を取得することもできますが、すべての Web アプリのすべてのサイトのすべてのリスト内のアイテムをカウントするのは簡単ではありません。

PowerShell for Microsoft 365 は、Microsoft 365 管理センターを置き換えるのではなく、Microsoft 365 の管理に役立つよう設計されています。 管理者は、Microsoft 365 用 PowerShell for Microsoft 365 コマンドでのみ実行できるいくつかの構成手順があるため、PowerShell for Microsoft 365 を使用できる必要があります。 このような場合は、次の方法を知る必要があります。

  • Microsoft 365 モジュール用の PowerShell をインストールします (管理者コンピューターごとに 1 回だけ実行されます)。

  • Microsoft 365 サブスクリプションに接続します (PowerShell セッションごとに 1 回)。

  • Microsoft 365 コマンドに必要な PowerShell を実行するために必要な情報を収集します。

  • PowerShell for Microsoft 365 コマンドを実行します。

これらの基本的なスキルを習得したら、 Get-Mailbox コマンドを使用してメールボックス ユーザーを一覧表示する必要はありません。 また、前に引用したコマンドのように新しいコマンドを作成して、すべての Web アプリのすべてのサイトのすべてのリストのすべての項目をカウントする方法を理解する必要はありません。 Microsoft と管理者のコミュニティは、必要に応じてこのようなタスクを支援できます。

PowerShell for Microsoft 365 では、Microsoft 365 管理センターで表示できない情報を表示できます

Microsoft 365 管理センターには多くの有用な情報が表示されますが、Microsoft 365 がユーザー、ライセンス、メールボックス、およびサイトに関して保存する可能性のあるすべての情報は表示されません。 Microsoft 365 管理センターのユーザーとグループの例を次に示します。

Microsoft 365 管理センターでのユーザーとグループの表示の例。

このビューには、多くの場合に必要な情報が表示されます。 しかし、もっと多くの情報が必要な場合もあります。 たとえば、Microsoft 365 ライセンス (およびユーザーが使用できる Microsoft 365 機能) は、ユーザーの地理的な場所によって一部異なります。 米国に住んでいるユーザーに拡張できるポリシーと機能は、インドやベルギーのユーザーに拡張できるポリシーと機能と同じでない場合があります。 ユーザーの地理的な場所を特定するには、Microsoft 365 管理センターの次の手順に従います。

  1. ユーザーの 表示名 をダブルクリックします。

  2. [ユーザー プロパティ] 表示ウィンドウで、[ 詳細] を選択します。

  3. 詳細表示で、追加の 詳細を選択します。

  4. [ 国または地域] という見出しが見つかるまでスクロールします。

    Microsoft 365 管理センター内のユーザーのリージョン情報の例。

  5. ユーザーの表示名と場所を紙に書き留めるか、コピーしてメモ帳に貼り付けます。

この手順をユーザーごとに繰り返す必要があります。 ユーザーが多い場合、このプロセスは面倒な場合があります。 PowerShell では、次のコマンドを使用して、すべてのユーザーに対してこの情報を表示できます。

注:

Azure Active Directory モジュールは、Microsoft Graph PowerShell SDK に置き換えられます。 Microsoft Graph PowerShell SDK を使用して、すべての Microsoft Graph API にアクセスできます。 詳細については、「Microsoft Graph PowerShell SDK の使用を開始する」 を参照してください。

まず、Microsoft Entra DC 管理者Cloud Application 管理、またはグローバル管理者アカウントを使用して、Microsoft 365 テナントに接続します

ユーザーの情報を取得するには、User.ReadBasic.All アクセス許可スコープ、または参照ページの [ライセンスの割り当て] に一覧表示されている他のアクセス許可のいずれかが必要Graph API。

テナントで使用できるライセンスを読み取るために、Organization.Read.All アクセス許可スコープが必要です。

注:

Azure AD および MSOnline PowerShell モジュールは、2024 年 3 月 30 日の時点で非推奨となりました。 詳細については、 非推奨の更新プログラムに関するページを参照してください。 この日付以降、これらのモジュールのサポートは、Microsoft Graph PowerShell SDK への移行支援とセキュリティ修正に限定されます。 非推奨のモジュールは、2025 年 3 月 30 日まで引き続き機能します。

Microsoft Entra ID (旧称 Azure AD) と対話するには、Microsoft Graph PowerShell に移行することをお勧めします。 移行に関する一般的な質問については、移行に関する FAQ を参照してください。 メモ: バージョン 1.0.x の MSOnline では、2024 年 6 月 30 日以降に中断が発生する可能性があります。

Connect-MgGraph -Scopes "User.ReadBasic.All"
Get-MgUser -All -Property DisplayName, UsageLocation | Select DisplayName, UsageLocation

結果の例を次に示します。

DisplayName                               UsageLocation
-----------                               -------------
Bonnie Kearney                            GB
Fabrice Canel                             BR
Brian Johnson (TAILSPIN)                  US
Anne Wallace                              US
Alex Darrow                               US
David Longmuir                            BR

この PowerShell コマンドの解釈は、現在の Microsoft 365 サブスクリプション (Get-MgUser) 内のすべてのユーザーを取得しますが、各ユーザーの名前と場所 (DisplayName、UsageLocation の選択) のみを表示します。

PowerShell for Microsoft 365 ではコマンド シェル言語がサポートされているため、 Get-MgUser コマンドによって取得された情報をさらに操作できます。 たとえば、これらのユーザーを場所別に並べ替えたり、すべてのブラジルユーザーをグループ化したり、すべての米国ユーザーをグループ化したりしたい場合などです。 コマンドを次に示します。

Get-MgUser -All -Property DisplayName, UsageLocation | Select DisplayName, UsageLocation | Sort UsageLocation, DisplayName

結果の例を次に示します。

DisplayName                                 UsageLocation
-----------                                 -------------
David Longmuir                              BR
Fabrice Canel                               BR
Bonnie Kearney                              GB
Alex Darrow                                 US
Anne Wallace                                US
Brian Johnson (TAILSPIN)                    US

この PowerShell コマンドの解釈は、現在の Microsoft 365 サブスクリプションのすべてのユーザーを取得しますが、各ユーザーの名前と場所のみを表示し、最初に場所で並べ替え、次に名前 (Sort UsageLocation, DisplayName) で並べ替えます

追加のフィルター処理を使用することもできます。 たとえば、ブラジル在住のユーザーに関する情報のみを表示する場合には、次のコマンドを使用します。

Get-MgUser -All -Property DisplayName, Country | Where-Object {$_.Country -eq "BR"} | Select DisplayName, Country 

結果の例を次に示します。

DisplayName                                           UsageLocation
-----------                                           -------------
David Longmuir                                        BR
Fabrice Canel                                         BR

この PowerShell コマンドの解釈は、現在の Microsoft 365 サブスクリプションの場所がブラジル ({$_) のすべてのユーザーを取得することです。UsageLocation -eq "BR"}) を選択し、各ユーザーの名前と場所を表示します。

大きなドメインに関する注意

数万人のユーザーを持つ大規模なドメインがある場合は、この記事で示す例をいくつか試すと、調整が発生する可能性があります。 コンピューティング能力や使用可能なネットワーク帯域幅などの要因に基づいて、一度に多くのことを行おうとしている可能性があります。 大規模な組織では、これらの PowerShell 操作の一部を 2 つのコマンドに分割したい場合があります。

たとえば、次のコマンドは、すべてのユーザー アカウントを返し、それぞれの名前と場所を示します。

Get-MgUser -All | Select DisplayName, UsageLocation

このコマンドは、規模が小さいドメインには最適に機能します。 ただし、大きなorganizationでは、その操作を 2 つのコマンド (ユーザー アカウント情報を変数に格納するコマンドと、必要な情報を表示するコマンド) に分割することができます。 次に例を示します:

$x = Get-MgUser -All -Property DisplayName, UsageLocation
$x | Select DisplayName, UsageLocation

PowerShell コマンドのこのセットの解釈は次のとおりです。

  1. 現在の Microsoft 365 サブスクリプションのすべてのユーザーを取得し、$x という名前の変数に情報を格納します ($x = Get-MgUser)。
  2. 変数 $xの内容を表示しますが、各ユーザーの名前と場所のみを含めます ($x |DisplayName、UsageLocation) を選択します。

Microsoft 365 には、PowerShell for Microsoft 365 でのみ構成できる機能があります

Microsoft 365 管理センターは、ほとんどの環境に適用される一般的で便利な管理タスクへのアクセスを提供することを目的としています。 つまり、Microsoft 365 管理センターは、一般的な管理者が最も一般的な管理タスクを実行できるように設計されています。 ただし、管理センターでは実行できないタスクがいくつかあります。

たとえば、Skype for Business Online 管理センターには、カスタム会議出席依頼を作成するためのいくつかのオプションが用意されています。

Skype for Business Online 管理センターでカスタムの会議出席依頼を表示する例です。

これらの設定を使用すると、会議出席依頼にパーソナルでプロフェッショナルな風合いを加えることができます。 ただし、単にカスタム会議出席依頼を作成するよりも、会議構成設定に多くの情報があります。 たとえば、既定では会議に関して以下の事柄が許可されています。

  • 匿名ユーザーが、各会議に自動的に参加すること。

  • 参加者が、会議を記録すること。

  • 組織のすべてのユーザーが、会議に参加するときに発表者として指定されること。

これらの設定は、Skype for Business Online 管理センターからは使用できません。 PowerShell for Microsoft 365 から制御できます。 次の 3 つの設定を無効にするコマンドを次に示します。

Set-CsMeetingConfiguration -AdmitAnonymousUsersByDefault $False -AllowConferenceRecording $False -DesignateAsPresenter "None"

注:

このコマンドを実行するには、Skype for Business Online PowerShell モジュールをインストールする必要があります。

この PowerShell コマンドの解釈は次のとおりです。

  1. 新しいSkype for Businessオンライン会議 (Set-CsMeetingConfiguration) の設定で、匿名ユーザーが会議への自動参加を許可することを無効にします (-AdmitAnonymousUsersByDefault $False)。
  2. 出席者が会議を記録する機能を無効にします (-AllowConferenceRecording $False)。
  3. organizationのすべてのユーザーを発表者として指定しないでください (-DesignateAsPresenter "None")。

これらの既定の設定を復元するには (オプションを有効にします)、次のコマンドを実行します。

Set-CsMeetingConfiguration -AdmitAnonymousUsersByDefault $True -AllowConferenceRecording $True -DesignateAsPresenter "Company"

他にも同様のシナリオがあるため、管理者は PowerShell for Microsoft 365 コマンドを実行する方法を知る必要があります。

Microsoft 365 用 PowerShell は、一括操作に最適です

Microsoft 365 管理センターのようなビジュアル インターフェイスは、1 つの操作を実行する場合に最も重要です。 たとえば、1 つのユーザー アカウントを無効にする必要がある場合は、管理センターを使用して、チェック ボックスをすばやく見つけてオフにすることができます。 これは、PowerShell で同様の操作を実行するよりも簡単な場合があります。

しかし、他のものの大きなセット内で多くのものを変更したり、選択した内容を変更したりする必要がある場合は、Microsoft 365 管理センターが最適なツールではない可能性があります。 たとえば、何千もの電話番号のプレフィックスを変更するか、特定のユーザー Ken Myer をすべての SharePoint サイトから削除する必要があるとします。 Microsoft 365 管理センターでどのように行いますか?

最後の例では、数百の SharePoint サイトがあり、Ken Meyer がメンバーであるサイトがわからないとします。 Microsoft 365 管理センターから開始し、サイトごとに次の手順を実行する必要があります。

  1. サイトの URL を 選択します。

  2. サイト コレクションのプロパティ ボックスで、[Web サイト アドレス] リンクを選択してサイトを開きます。

  3. サイトで、[共有] を選択 します

  4. [ 共有 ] ダイアログ ボックスで、サイトへのアクセス許可を持つすべてのユーザーを表示するリンクを選択します。

    SharePoint 管理 センターで SharePoint サイトのメンバーを表示する例。

  5. [共有先] ダイアログ ボックス 、[ 詳細設定] を選択します。

  6. ユーザーの一覧を下にスクロールし、Ken Myer (サイトへのアクセス許可がある場合) を見つけて選択し、[ ユーザーのアクセス許可の削除] を選択します。

これは数百のサイトに 長い 時間がかかります。

代わりに、PowerShell for Microsoft 365 で次のコマンドを実行して、すべてのサイトから Ken Myer を削除します。

Get-SPOSite | ForEach {Remove-SPOUser -Site $_.Url -LoginName "kenmyer@litwareinc.com"}

注:

このコマンドでは、 SharePoint PowerShell モジュールをインストールする必要があります。

この PowerShell コマンドの解釈は、現在の Microsoft 365 サブスクリプション (Get-SPOSite) 内のすべての SharePoint サイトを取得し、サイトごとにアクセスできるユーザーの一覧から Ken Meyer を削除します (ForEach {Remove-SPOUser -Site $_)。Url -LoginName "kenmyer@litwareinc.com"})。

Microsoft 365 では、アクセスできないサイトを含め、すべてのサイトから Ken Meyer を削除するよう指示しています。 そのため、アクセスできないサイトのエラーが結果に表示されます。 このコマンドで追加の条件を使用して、Ken Meyer をサインイン リストに含まれているサイトからのみ削除できます。 しかし、返されるエラーは、サイト自体に害を及ぼしません。 このコマンドは、Microsoft 365 管理センターを処理する時間ではなく、数百のサイトに対して実行するのに数分かかる場合があります。

もう 1 つの一括操作の例を次に示します。 次のコマンドを使用して、新しい SharePoint 管理者のボニー・カーニーをorganization内のすべてのサイトに追加します。

Get-SPOSite | ForEach {Add-SPOUser -Site $_.Url -LoginName "bkearney@litwareinc.com" -Group "Members"}

この PowerShell コマンドの解釈は、現在の Microsoft 365 サブスクリプション内のすべての SharePoint サイトを取得し、各サイトで、サイトのメンバー グループ (ForEach {Add-SPOUser -Site $_) にサインイン名を追加することで、ボニー ケニー アクセスを許可します。Url -LoginName "bkearney@litwareinc.com" -Group "Members"})。

Microsoft 365 用 PowerShell は、データのフィルター処理に最適です

Microsoft 365 管理センターには、データをフィルター処理して、対象となる情報のサブセットを簡単に見つけるためのいくつかの方法が用意されています。 たとえば、Exchange では、ユーザー メールボックスのほとんどすべてのプロパティに対するフィルターを簡単に適用できます。 たとえば、ブルーミントン市に住むすべてのユーザーのメールボックスの一覧を次に示します。

ブルーミントン市に住むすべてのユーザーのメールボックスの一覧をMicrosoft 365 管理センターで高度な検索を行う例。

Exchange 管理センターでは、フィルター条件を組み合わせることもできます。 たとえば、ブルーミントンに住み、財務部門で働いているすべてのユーザーのメールボックスを見つけることができます。

ただし、Exchange 管理 センターでできることには制限があります。 たとえば、ブルーミントンやサンディエゴに住んでいる人のメールボックス 、ブルーミントンに住まないすべての人のメールボックスを簡単に見つけることができませんでした。

次の PowerShell for Microsoft 365 コマンドを使用して、ブルーミントンまたはサンディエゴに住むすべてのユーザーのメールボックスの一覧を取得できます。

Get-User | Where {$_.RecipientTypeDetails -eq "UserMailbox" -and ($_.City -eq "San Diego" -or $_.City -eq "Bloomington")} | Select DisplayName, City

結果の例を次に示します。

DisplayName                              City
-----------                              ----
Alex Darrow                              San Diego
Bonnie Kearney                           San Diego
Julian Isla                              Bloomington
Rob Young                                Bloomington

この PowerShell コマンドの解釈は、現在の Microsoft 365 サブスクリプションで、サンディエゴまたはブルーミントン市にメールボックスを持つすべてのユーザーを取得します ({$_。RecipientTypeDetails -eq "UserMailbox" -and ($_.City -eq "San Diego" -or $_.City -eq "Bloomington")})、それぞれの名前と市区町村 (DisplayName、City の選択) を表示します。

また、ブルーミントン以外の任意の場所に住んでいるユーザーのすべてのメールボックスを一覧表示するコマンドを次に示します。

Get-User | Where {$_.RecipientTypeDetails -eq "UserMailbox" -and $_.City -ne "Bloomington"} | Select DisplayName, City

結果の例を次に示します。

DisplayName                               City
-----------                               ----
MOD Administrator                         Redmond
Alex Darrow                               San Diego
Allie Bellew                              Bellevue
Anne Wallace                              Louisville
Aziz Hassouneh                            Cairo
Belinda Newman                            Charlotte
Bonnie Kearney                            San Diego
David Longmuir                            Waukesha
Denis Dehenne                             Birmingham
Garret Vargas                             Seattle
Garth Fort                                Tulsa
Janet Schorr                              Bellevue

この PowerShell コマンドの解釈は、現在の Microsoft 365 サブスクリプションで、ブルーミントン市にメールボックスがないすべてのユーザーを取得します ({$_。RecipientTypeDetails -eq "UserMailbox" -and $_.City -ne "Bloomington"})、それぞれの名前と都市を表示します。

ワイルドカードを使用する

PowerShell フィルターでワイルドカード文字を使用して、名前の一部と一致することもできます。 たとえば、ユーザー アカウントを探しているとします。 覚えておくことができるのは、ユーザーの姓が Anderson、ヘンダーソン または ホルゲンソンだったことです。

検索ツールを使用し、次の 3 つの異なる検索を実行することで、Microsoft 365 管理センターでそのユーザーを追跡できます。

  • Anderson 用のもの

  • Henderson 用のもの

  • Jorgenson 用のもの

これらの 3 つの名前はすべて "son" で終わるため、名前が "son" で終わるすべてのユーザーを表示するように PowerShell に指示できます。 コマンドを次に示します。

Get-User -Filter '{LastName -like "*son"}'

この PowerShell コマンドの解釈は、現在の Microsoft 365 サブスクリプションのすべてのユーザーを取得しますが、姓が "son" で終わるユーザーのみを一覧表示するフィルターを使用します (-Filter '{LastName -like "*son"}')。 * は、ユーザーの姓の文字である任意の文字セットを表します。

PowerShell for Microsoft 365 を使用すると、データを簡単に印刷または保存できます

Microsoft 365 管理センターを使用すると、データの一覧を表示できます。 Skype for Business Online 管理センターで、Skype for Business Online が有効になっているユーザーの一覧を表示する例を次に示します。

Skype for Business Online 管理センターで、Skype for Business Online に対して有効になっているユーザーの一覧を表示する例です。

その情報をファイルに保存するには、ドキュメントまたは Microsoft Excel ワークシートに貼り付ける必要があります。 どちらの場合も、追加の書式設定が必要になる場合があります。 さらに、Microsoft 365 管理センターでは、表示される一覧を直接印刷する方法はありません。

幸いなことに、PowerShell を使用してリストを表示するだけでなく、Excel に簡単にインポートできるファイルに保存することもできます。 オンライン ユーザー データSkype for Businessコンマ区切り値 (CSV) ファイルに保存するコマンドの例を次に示します。これにより、Excel ワークシートのテーブルとして簡単にインポートできます。

Get-CsOnlineUser | Select DisplayName, UserPrincipalName, UsageLocation | Export-Csv -Path "C:\Logs\SfBUsers.csv" -NoTypeInformation

結果の例を次に示します。

Excel ワークシートにインポートされた、コンマ区切りの値ファイルに保存されたオンライン ユーザー データSkype for Business使用するテーブルの例。

この PowerShell コマンドの解釈は、現在の Microsoft 365 サブスクリプションのすべての Skype for Business Online ユーザー (Get-CsOnlineUser) を取得し、ユーザー名、UPN、および場所 (Select DisplayName、UserPrincipalName、UsageLocation) のみを取得し、その情報を C:\Logs\SfBUsers.csv という名前の CSV ファイルに保存します (Export-Csv -Path "C:\Logs\SfBUsers.csv" -NoTypeInformation)。

オプションを使用して、このリストを XML ファイルまたは HTML ページとして保存することもできます。 実際、追加の PowerShell コマンドを使用すると、任意のカスタム書式で Excel ファイルとして直接保存できます。

リストを Windows の既定のプリンターに直接表示する PowerShell コマンドの出力を送信することもできます。 コマンドの例を次に示します。

Get-CsOnlineUser | Select DisplayName, UserPrincipalName, UsageLocation | Out-Printer

印刷されたドキュメントは次のようになります。

Windows の既定のプリンターに直接送信される PowerShell コマンドの出力である印刷ドキュメントの例。

この PowerShell コマンドの解釈は、現在の Microsoft 365 サブスクリプションのすべての Skype for Business Online ユーザーを取得し、ユーザー名、UPN、場所のみを取得し、その情報を既定の Windows プリンター (Out-Printer) に送信することです。

印刷されたドキュメントの書式は、PowerShell コマンド ウィンドウの表示と同じです。 ハード コピーを取得するには、 |コマンドの 最後にプリンターを出力します。

PowerShell for Microsoft 365 を使用すると、サーバー製品全体で管理できます

Microsoft 365 を構成するコンポーネントは、連携するように設計されています。 たとえば、新しいユーザーを Microsoft 365 に追加し、ユーザーの部署や電話番号などの情報を指定するとします。 その後、Microsoft 365 サービス (Skype for Business Online、Exchange、または SharePoint) でユーザーの情報にアクセスすると、その情報が利用できるようになります。

ただし、これは製品のスイートに共通する一般情報の場合です。 ユーザーの Exchange メールボックスに関する情報など、製品固有の情報は、通常、スイート全体で使用できません。 たとえば、ユーザーのメールボックスが有効かどうかに関する情報は、Exchange 管理センターでのみ使用できます。

すべてのユーザーに関する次のような情報を示すレポートを作成するとします。

  • ユーザーの表示名

  • ユーザーが Microsoft 365 のライセンスを取得しているかどうか

  • ユーザーの Exchange メールボックスが有効になっているかどうか

  • ユーザーが Skype for Business Online に対して有効になっているかどうか

このようなレポートをMicrosoft 365 管理センターで簡単に生成することはできません。 代わりに、Excel ワークシートなどの情報を格納する別のドキュメントを作成する必要があります。 次に、Microsoft 365 管理センターからすべてのユーザー名とライセンス情報を取得し、Exchange 管理センターからメールボックス情報を取得し、Skype for Business Skype for Business Online 管理 センターからオンライン情報を取得し、その情報を結合します。

代わりに、PowerShell スクリプトを使用してレポートをコンパイルすることもできます。

次のスクリプト例は、この記事でこれまでに説明したコマンドよりも複雑です。 ただし、PowerShell を使用して、それ以外の場合は取得しにくい情報ビューを作成する可能性を示しています。 必要なリストをコンパイルして表示するスクリプトを次に示します。

Connect-MgGraph -Scopes "User.ReadBasic.All"
$x = Get-MgUser -All

foreach ($i in $x)
    {
      $y = Get-Mailbox -Identity $i.UserPrincipalName
      $i | Add-Member -MemberType NoteProperty -Name IsMailboxEnabled -Value $y.IsMailboxEnabled

      $y = Get-CsOnlineUser -Identity $i.UserPrincipalName
      $i | Add-Member -MemberType NoteProperty -Name EnabledForSfB -Value $y.Enabled
    }

$x | Select DisplayName, IsLicensed, IsMailboxEnabled, EnabledforSfB

結果の例を次に示します。

DisplayName             IsLicensed   IsMailboxEnabled   EnabledForSfB
-----------             ----------   ----------------   --------------
Bonnie Kearney          True         True               True
Fabrice Canel           True         True               True
Brian Johnson           False        True               False
Anne Wallace            True         True               True
Alex Darrow             True         True               True
David Longmuir          True         True               True
Katy Jordan             False        True               False
Molly Dempsey           False        True               False

この PowerShell スクリプトの解釈は次のとおりです。

  1. 現在の Microsoft 365 サブスクリプションのすべてのユーザーを取得し、 $x という名前の変数に情報を格納します ($x = Get-MgUser)。
  2. 変数$x ($xの foreach ($i) 内のすべてのユーザーに対して実行されるループを開始します。
  3. $yという名前の変数を定義し、その中にユーザーのメールボックス情報を格納します ($y = Get-Mailbox -Identity $i.UserPrincipalName)。
  4. IsMailBoxEnabled という名前のユーザー情報に新しいプロパティを追加します。 ユーザーのメールボックスの IsMailBoxEnabled プロパティの値に設定します ($i | Add-Member -MemberType NoteProperty -Name IsMailboxEnabled -Value $y.IsMailboxEnabled)。
  5. $y という名前の変数を定義し、ユーザーの Skype for Business Online 情報を格納します ($y = Get-CsOnlineUser -Identity $i.UserPrincipalName)。
  6. EnabledForSfB という名前のユーザー情報に新しいプロパティを追加します。 ユーザーの Skype for Business Online 情報の Enabled プロパティの値に設定します ($i | Add-Member -MemberType NoteProperty -Name EnabledForSfB -Value $y.Enabled)。
  7. ユーザーの一覧を表示しますが、ユーザーの名前、ライセンスの有無、メールボックスが有効かどうかと、Skype for Business Online で有効になっているかどうかを示す 2 つの新しいプロパティ ($x |DisplayName、IsLicensed、IsMailboxEnabled、EnabledforSfB) を選択します。

関連項目

Microsoft 365 用 PowerShell の使用を開始する

Microsoft 365 ユーザー アカウント、ライセンス、PowerShell を使用したグループを管理する

Windows PowerShell を使用して Microsoft 365 でレポートを作成する