PowerShellでGet-AdGroupMemberを使用してレポートを生成する

A popular use of PowerShell is working with Active Directory Directory Services (AD). There are so many time-saving things PowerShell can do with AD objects. Using the PowerShell Get-ADGroupMember cmdlet and other cmdlets can save you a ton of time.

Active Directory グループは、ユーザーアカウントをセグメント化するための素晴らしい方法です。グループを使用すると、管理者は多くのシステム上でリソースアクセスを定義できます。

この記事では、PowerShell を使用して AD グループのメンバーを取得し、AD グループのメンバーをエクスポートする方法について説明します。これにより、さまざまな興味深いレポートを生成するための情報を取得できます。

Active Directory group

Manage and Report Active Directory、Exchange、Microsoft 365 with ManageEngine ADManager Plus. 無料トライアルをダウンロード!

前提条件

この記事に沿って進める場合は、以下の要件を準備してください:

  • Windows 10 に参加しているコンピューターで作業すること
  • AD グループとユーザーアカウントを読み取ることができるユーザーでログインすること
  • PowerShell Active Directory モジュールがインストールされていること

基本を学ぶ

AD グループとグループメンバーをクエリするには、2つの PowerShell コマンドレットが利用可能です – Get-AdGroupGet-AdGroupMember

Get-ADGroupはドメインコントローラーをクエリし、ADグループオブジェクトを返します。 Get-AdGroupMemberは各グループ内を調べ、そのグループ内に存在するすべてのユーザーアカウント、グループ、連絡先、その他のオブジェクトを返します。

ADグループの取得

PowerShellを使用してADグループを検索するには、Get-ADGroupコマンドレットを使用できます。パラメーターなしで使用すると、Get-ADGroupすべてのグループをフィルターパラメーターを使用してドメイン内でクエリし返します。フィルターパラメーターは必須です。さまざまな基準に基づいて返されるグループを制限するために存在します。

たとえば、基準を考慮せずにすべてのグループを検索する場合は、Get-ADGroupを使用し、フィルターパラメーターにワイルドカード(アスタリスク)を指定します。以下に例を示します。ドメインに数百、数千のグループがある場合、これらのグループをスクロールするのに時間がかかる場合があります。

Get-ADGroup -Filter *

単一のグループを見つける必要がある場合は、Identityパラメーターを使用できます。

Identityパラメーターは、すべてのActive Directory PowerShellコマンドレットで共通のパラメーターです。これを使用すると、クエリを単一のADオブジェクトに限定することができます。たとえば、HRという名前のグループが存在するかどうかを確認する必要がある場合は、以下のコマンドを実行して確認できます。

Get-ADGroup -Identity 'HR'

Get-AdGroupMemberを使用してADグループのメンバーを取得

PowerShellを使用してADグループのメンバーをリストするには、Get-ADGroupMemberコマンドレットが必要です。このコマンドレットは、特定のグループ内のユーザー、グループ、およびコンピュータオブジェクトを取得します。たとえば、Administratorsグループのすべてのメンバーを見つける必要があるかもしれません。最も基本的な形式では、Identityパラメータを使用して、グループの名前を指定するだけです。

Get-ADGroupMember -Identity 'Administrators'

Get-AdGroupMemberは、ユーザー、グループ、コンピュータのグループメンバーシップのみを返します。連絡先などの他のADオブジェクトは返されません。

グループメンバーの列挙

ADグループは、ユーザーアカウントだけでなく、ネストと呼ばれる他のグループも含むことができます。グループが別のグループの内部にネストされている場合、そのグループのメンバーは親グループに割り当てられた同じ権限を継承します。

デフォルトでは、PowerShellのGet-AdGroupMemberコマンドレットはネストされたグループのメンバーを返しません。これを解決するために、Recursiveパラメータを使用できます。たとえば、Recursiveパラメータを使用して、HRグループ内のネストされたグループのメンバーを見つけることができます。

Get-ADGroupMember -Identity 'HR' -Recursive

一度に複数のグループ/メンバーを取得

ADに一度に多くの異なるグループやグループメンバーをクエリする必要がある場合、PowerShellのforeachループを使用することもできます。foreachループは、コマンドまたはコードをコレクション内の各アイテムに対して実行します。この場合、そのコレクションはグループ名のリストです。

たとえば、HR会計ITグループのすべてのメンバーを検索する必要があるかもしれません。そのためには、まずこれらのグループ名のコレクションまたは配列を作成します。以下の例では、このコレクションを$groupNamesと定義しています。その後、そのコレクション内の各名前に対して、Get-ADGroupMemberコマンドを実行し、Identityパラメータに各グループの名前を指定します。

$groupNames = 'HR','Accounting','IT'
foreach ($group in $groupNames) {
    Get-ADGroupMember -Identity $group
}

代わりにForEach-Objectコマンドレットを使用してグループをループすることもできます。

別の資格情報の使用

ADグループのコマンドレットには、他の多くのPowerShellコマンドレットと同様に、Credentialパラメータがあります。デフォルトでは、ADグループのコマンドレットを実行すると、Active Directoryへのクエリにログインしている資格情報が使用されます。この動作により、パーミッションを持つActive Directoryユーザーとしてドメインに参加しているコンピュータにログインする必要があります。

ただし、ワークグループのコンピュータを使用している場合や、別のユーザーとして AD に認証する必要がある場合はどうなりますか? その場合、Credential パラメーターを使用できます。 このパラメーターを使用すると、認証に使用するユーザー名とパスワードを指定できます。

たとえば、ユーザーアカウントには AD タスクを実行する権限がないかもしれません。 ただし、追加の権限を持つサービスアカウントがあります。 以下のように、標準ユーザーとしてログインしたまま、サービスアカウントで認証することができます。

Get-Credential コマンドレットは、ユーザー名とパスワードを入力するようにプロンプトを表示し、資格情報を作成します。 この資格情報は、認証に使用するために Get-AdGroup コマンドレットに渡されます。

Get-ADGroup -Identity 'HR' -Credential (Get-Credential)

Credential パラメーターは、認証資格情報を提供するために PowerShell で広く使用されます。 詳細については、PowerShell の Get-Credential コマンドレットと認証関連のすべてを読んでください。

Get-ADGroup を使用してグループメンバーを取得しますか?

直感に反するかもしれませんが、Get-ADGroup コマンドレットでもグループメンバーを取得することができます。

Get-ADGroup は、グループごとに members というプロパティを返します。 これは、グループのメンバーである AD オブジェクトのコレクションです。

たとえば、Get-ADGroupMember を使用せずに、HR グループのメンバーを検索するには、次のようにします:

Get-ADGroup -Identity 'HR' -Properties members

なぜ他の方法よりもこの方法を使用するのですか?主な違いは、membersプロパティにはユーザー、コンピューター、その他のグループだけでなく、すべてのADオブジェクトが含まれていることです。

おそらく、さまざまなグループ内に連絡先があるかもしれません。 Get-ADGroupMemberを実行すると、その連絡先は表示されません。しかし、Get-ADGroupに対して以下に示すように、そのグループのすべてのメンバーを返し、そのコレクションを展開するように指示すると、連絡先が表示されます。

Get-ADGroup -Identity 'HR' -Properties members | Select-Object -ExpandProperty members

特定のAD属性を検索

前述の基本セクションでは、単にすべてのグループとグループメンバーを返していました。各グループとグループメンバーに返される情報は、それぞれのオブジェクトの関連するAD属性のサブセットに過ぎません。

おそらく、ユーザーアカウントのメールアドレス、最終ログオン日など、関連するAD属性を表示したいのかもしれません。これを行うには、クリエイティブになる必要があります。

おそらく、HRグループのすべてのグループメンバーを見つけることができましたが、各ユーザーアカウントのメールアドレスも表示する必要があるかもしれません。

$groupMembers = (Get-ADGroup -Identity 'HR' -Properties members).members
$groupMembers | Select-Object -Property Name, @{Name='Member';exp={Get-AdUser -Identity $_.Name -Properties emailAddress,lastlogonDate}}

結果のフィルタリング

これまでに、すべてのグループとグループメンバーを見つけましたが、日常の作業環境では、これはほとんど必要ありません。おそらく、各アイテムの一部のみを見つける必要があるでしょう。ADグループのコマンドレットには、これを処理するためのいくつかの方法があります。

Filterパラメーター

前述のように、両方のコマンドレットにはFilterパラメーターがあります。このパラメーターを使用すると、この記事の範囲外でさまざまな方法で返される内容を制限することができます。

Filter パラメータを使用すると、名前、グループの種類、電子メールアドレス、最終ログオンなど、任意の AD 属性で結果を制限することができます。

たとえば、セキュリティグループのみを検索したい場合、GroupCategory 属性を指定し、条件を設定して Security グループのみを返すようにします。

Get-ADGroup -Filter 'GroupCategory -eq "Security"'

すべてのセキュリティグループを検索したいが、ドメインローカルグループではないものに限定したい場合は、もう1つの条件を追加します(この場合は -ne 演算子を使用)。これにより、ドメインローカルグループが返されないようになります。

Get-ADGroup -Filter 'GroupCategory -eq "Security" -and GroupScope -ne "DomainLocal"'

クエリフィルタの作成方法について学びたい場合は、PowerShell での Active Directory および LDAP フィルタの学習を参照してください。

組織単位(OU)によるグループの結果の制限

さまざまなグループが OU にネストしている場合、すべてのグループを検索するのではなく、特定の OU 内のグループのみを検索したい場合は、SearchBase パラメータを使用できます。

SearchBase パラメータを使用すると、グループの検索を開始する OU の識別名(DN)を指定できます。たとえば、ドメインのルートに Locations という OU があるとします。 Locations OU 内には、AustinNYCLos Angeles などの各場所の OU が作成されています。 NYC OU 内のグループのみを検索し、他のグループは表示しない必要があります。

以下に、例として AD の OU 構造を示します。 Locations OU の外にも他のグループが存在することに注意してください。

company.local
- Locations
  - Austin
  - NYC
    - Group 1
    - Group 2
  - Los Angeles
- Computers
  - Group 3
  - Group 4
- Service Accounts

NYC OUにしかないすべてのADグループを見つける必要があるかもしれません。クエリを制限するために、下記のようにDNを提供するSearchBaseパラメータを使用します。 Locations OU内のすべてのグループが返されます。

Get-ADGroup -Filter '*' -SearchBase 'OU=Locations,OU=NYC,DC=company,DC=pri'

しかし、今度はLocations OUの下のすべての OU内のすべてのグループを見つける必要があります。 Get-ADGroupは、Locations OU自体にあるグループのみを返します – 子OUにはありません。

子OU内のグループを返すには、SearchScopeパラメータを使用する必要があります。このパラメータは、子オブジェクトも検査するRecursiveパラメータに似ています。

たとえば、Locations OUの下の任意の OU内のすべてのグループを見つけるには、Subtreeまたは2を指定します。 SearchScopeのこの値は、Get-ADGroupに対して再帰的にすべての子、孫、およびOUを調べるよう指示します。

Get-ADGroup -Filter '*' -SearchBase 'OU=Locations,DC=company,DC=pri' -SearchScope 2

SearchScopeパラメータオプションの詳細については、Get-ADGroupのドキュメントを参照してください。

ADグループとメンバーのエクスポート

必要なグループとグループメンバーをクエリして返す方法は、すでにわかりました。このすべての情報はPowerShellコンソールに送信されます。ただし、この情報をCSVファイルまたはExcelワークシートに取得する必要があります。

今すべての情報をファイルに送信するだけです。

CSVへのエクスポート

AD情報をエクスポートする人気のある形式の1つはCSVです。PowerShellには、PowerShellの出力から簡単にCSVファイルを作成できる便利なコマンドレットExport-Csvがあります。

この記事でカバーされているコマンドのいずれかを使用して、任意のCSVファイルを作成することができます。Export-Csvにパイプすることで実現できます。以下の例では、Get-AdGroupがコンソールに返すすべての出力をCSVファイルにリダイレクトします。

Get-ADGroup -Filter '*' -SearchBase 'OU=Locations,DC=company,DC=pri' -SearchScope 2 | Export-Csv -Path 'departmental_groups.csv' -NoTypeInformation

この便利なコマンドレットの詳細については、「Export-Csv: PowerShellでCSVファイルを最上位の要素として扱う方法」を参照してください。

Get-AdGroupMemberコマンドレットを使用して、簡単に結果をCSVファイルにエクスポートすることもできます。

Excelへのエクスポート

PowerShellにはExcelへの情報エクスポートのネイティブな方法はありませんが、無料のコミュニティモジュールであるImportExcelをダウンロードすることができます。このモジュールは、CSVのようなエクスポート機能を直接Excelのワークシートにもたらします。PowerShellモジュールをインストールするには、Install-Module ImportExcel -Scope CurrentUserを実行します。

上記の例では、CSVファイルの代わりにグループをExcelのワークシートにエクスポートする場合、以下に示すようにExport-Excelコマンドレットを使用します。

NCSCパスワードリストと照合することで、Active Directory内の漏洩したパスワードや安全でないパスワードを検出する方法を見つけることができます。

Get-ADGroup -Filter '*' -SearchBase 'OU=Locations,DC=company,DC=pri' -SearchScope 2 | Export-Excel -Path 'departmental_groups.csv'

ImportExcelモジュールには、Excelとの作業に関連する多くの機能があります。もしもっと高度なワークシートが必要な場合、おそらくあなたに適した機能があります。

ImportExcelモジュールの使用方法については、この記事をお読みください。それは、扱える一般的なユースケースについての素晴らしい紹介を提供しています。

ManageEngine ADManager Plusを使用して、Active Directory、Exchange、およびMicrosoft 365を管理およびレポートします。 無料トライアルをダウンロード!

結論

たった2つのPowerShellコマンドレットを使用するだけで、ADグループでほとんど何でもできます。この記事は、利用できる機能の紹介にすぎません。ここで収集した知識を活用し、記事内のより深いテーマに関連するリンクをたどって、自分が何を構築できるか見てみてください!

Source:
https://adamtheautomator.com/get-adgroupmember/