Adam the Automator (日本語)
PowerShellの一般的な使用法は、Active Directoryディレクトリサービス(AD)での作業です。 PowerShellがADオブジェクトを使用して実行できる時間節約の方法はたくさんあります。 PowerShell get ADグループメンバーとグループを使用すると、時間を大幅に節約できます。
Active Directoryグループは、ユーザーアカウントをセグメント化するための優れた方法です。グループを使用すると、管理者は多くのシステム間でリソースアクセスを定義できます。
この記事では、PowerShellを使用してADグループメンバーを取得し、ADグループメンバーをエクスポートします。次に、この情報を使用して、多数の興味深いレポートを生成できます。
目次
前提条件
この記事を読み進めたい場合は、次の要件を満たしていることを確認してください。
- Windows 10、ドメインに参加しているコンピューターでの作業
- ADグループとユーザーアカウントを読み取ることができるユーザーでログインする
- PowerShell ActiveDirectoryモジュールをインストールする
基本を学ぶ
ADグループとグループメンバーにクエリを実行するには、Get-AdGroup
とGet-AdGroupMember
の2つのPowerShellコマンドレットを自由に使用できます。
Get-ADGroup
は、ドメインコントローラーにクエリを実行し、ADグループオブジェクトを返します。 Get-AdGroupMember
は各グループの内部を調べ、そのグループに存在するすべてのユーザーアカウント、グループ、連絡先、その他のオブジェクトを返します。
ADグループの取得
PowerShellでADグループを検索するには、Get-ADGroup
コマンドレットを使用できます。パラメータがない場合、Get-ADGroup
はADにクエリを実行し、Filter
パラメータを使用してドメイン内のすべてのグループを返します。 Filter
パラメーターは必須です。さまざまな基準に基づいて返されるグループを制限するために存在します。
たとえば、基準に関係なくすべてのグループを検索するには、Get-ADGroup
を使用し、ワイルドカードを指定します( Filter
パラメータのアスタリスク)。以下に例を示します。ドメインに数百または数千のグループがある場合、これらすべてのグループをスクロールするには時間がかかることがあります。
1つのグループを見つける必要がある場合は、次のことができます。 Identity
パラメーターを使用します。
Identity
パラメーターは、すべてのActive DirectoryPowerShellコマンドレットに共通のパラメーターです。これにより、クエリを単一のADオブジェクトに制限できます。たとえば、HRというグループが存在するかどうかを確認する必要がある場合は、次のコマンドを実行して確認できます。
ADグループメンバーの取得
PowerShellを使用してADグループのメンバーを一覧表示するには、Get-ADGroupMember
コマンドレットが必要です。このコマンドレットは、特定のグループ内のユーザー、グループ、およびコンピューターオブジェクトを取得します。おそらく、Administratorsグループのすべてのメンバーを見つける必要があります。最も単純な形式では、Identity
パラメータを再度使用して、以下のようにグループの名前を指定します。
Get-AdGroupMember
は、ユーザー、グループ、およびコンピューターのグループメンバーシップのみを返すことに注意してください。連絡先などの他のADオブジェクトは返されません。
グループメンバー内のグループメンバーの列挙
ご存知かもしれませんが、ADグループユーザーアカウントだけでなく、ネストとも呼ばれる他のグループを含めることができます。グループが別のグループ内にネストされている場合、そのグループのメンバーは、親グループに割り当てられた同じアクセス許可を継承します。
デフォルトでは、PowerShell Get-AdGroupMember
コマンドレットはネストされたグループメンバーを返しません。これを修正するには、Recursive
パラメーターを使用できます。たとえば、次のようにRecursive
パラメーターを使用してHRグループ内にネストされたグループのメンバーを見つけることができます。
複数のグループ/メンバーを一度に取得する
ADに多数の異なるグループまたはグループメンバーを一度に照会する必要がある場合は、PowerShellforeachループを使用してそれを行うこともできます。 foreachループは、コレクション内の各アイテムに対してコマンドまたはコードを実行します。この場合、そのコレクションはグループ名のリストになります。
おそらく、人事、経理、ITグループのすべてのグループメンバーを見つける必要があります。これを行うには、最初にこれらのグループ名のコレクションまたは配列を作成します。以下の例では、このコレクションを$groupNames
として定義しています。次に、そのコレクション内の名前ごとに、Get-ADGroupMember
を実行して、各グループの名前をIdentity
パラメーターに指定します。
または、
ForEach-Object
コマンドレットを使用してグループをループすることもできます。
代替資格情報の使用
他の多くのPowerShellコマンドレットと同様に、ADグループコマンドレットにはCredential
パラメータ。既定では、ADグループコマンドレットを実行すると、ログインした資格情報を使用してActiveDirectoryにクエリが実行されます。この動作により、アクセス許可を持つActiveDirectoryユーザーとしてログインしているドメインに参加しているコンピューターを使用する必要があります。
ただし、ワークグループコンピューターを使用している場合、または別のコンピューターとしてADに認証する必要がある場合はどうなりますか。ユーザー?その場合、Credential
パラメーターを使用できます。このパラメータを使用すると、認証に使用するユーザー名とパスワードを指定できます。
たとえば、ユーザーアカウントにADタスクを実行する権限がない可能性があります。追加の権限を持つサービスアカウントがあります。以下に示すように、標準ユーザーとしてログインしても、サービスアカウントで認証できます。
Get-Credential
コマンドレットは、ユーザー名/パスワードを入力して作成するように求めます。資格情報。次に、この資格情報は認証のためにGet-AdGroup
コマンドレットに渡されます。
Credential
パラメーターは、認証資格情報を提供するためにPowerShellに遍在しています。詳細については、PowerShellGet-Credentialコマンドレットとすべての資格情報の使用を参照してください。
Get-ADGroupを使用してグループメンバーを取得しますか?
直感に反するように聞こえるかもしれませんが、Get-ADGroup
コマンドレットを使用してグループメンバーを取得することもできます。
Get-ADGroup
は、members
という各グループのプロパティを返します。これらは、グループのメンバーであるADオブジェクトのコレクションです。
たとえば、Get-ADGroupMember
を使用せずに、そのHRグループ内のグループメンバーを再度検索するには、次のようなことを行います:
なぜこの方法を他の方法よりも使用するのですか?主な違いは、members
プロパティには、ユーザー、コンピューター、その他のグループだけでなく、すべてのタイプのADオブジェクトが含まれていることです。
おそらく、さまざまなグループ内に連絡先があります。 。 Get-ADGroupMember
を実行すると、それらの連絡先は表示されません。ただし、Get-ADGroup
に、そのグループ内のすべてのメンバーを返すように指示し、次に示すようにそのコレクションを展開すると、連絡先が表示されます。
特定のAD属性の検索
上記の基本セクションでは、単にすべてのグループとグループメンバーを返していました。各グループおよびグループメンバーに対して返される情報は、各タイプのオブジェクトに関連付けられたAD属性のサブセットにすぎません。
ユーザーアカウントの電子メールアドレス、最終ログオン日、またはその他の関連付けられたAD属性を確認したい場合があります。 ?これを行うには、創造性を発揮する必要があります。
HRグループ内のすべてのグループメンバーを見つけることができたかもしれませんが、各ユーザーアカウントのメールアドレスも確認する必要がありますか?
結果のフィルタリング
これまで、すべてのグループとグループメンバーを見つけましたが、日常の作業環境では、これを行う必要はほとんどありません。たぶん、各アイテムの限られた数だけを見つける必要があるでしょう。 ADグループコマンドレットには、これを処理する方法がいくつかあります。
フィルターパラメーター
前述のように、両方のコマンドレットにはFilter
があります。パラメータ。このパラメーターを使用すると、この記事の範囲外で返されるものをさまざまな方法で制限できます。
Filter
パラメーターを使用すると、任意のADによる結果を制限できます。名前、グループタイプ、電子メールアドレス、ユーザーの最終ログオンなどの属性。
たとえば、セキュリティグループのみを検索したい場合があります。その場合は、GroupCategory
属性を指定し、Security
グループのみが返されるように条件を設定します。
すべてのセキュリティグループを検索したい場合がありますが、ドメインローカルグループであってはなりません。次に、別の条件を追加して(今回は、-ne
演算子を使用)、ドメインローカルグループが返されないようにします。
クエリフィルターの作成方法を学習したい場合は、PowerShellでのActiveDirectoryおよびLDAPフィルターの学習を確認してください。
組織単位(OU)によるグループ結果の制限
おそらく、さまざまなグループがOUにネストされています。必ずしもすべてのグループを検索する必要はありませんが、特定のOU内のグループのみを検索する必要があります。その場合は、SearchBase
パラメーターを使用できます。
SearchBase
パラメーターを使用すると、OUの識別を指定できます。名前(DN)でグループの検索を開始します。たとえば、ドメインのルートにLocationsという名前のOUがあるとします。 Locations OUには、オースティン、NYC、ロサンゼルスなどの各ロケーションOUが作成されています。 NYC OUでグループを探しているだけで、他のグループの表示を制限する必要があります。
ADOU構造の例を以下に示します。ロケーションOUの外部に他のグループが存在することに注意してください。
おそらく、NYCOUにのみ存在するすべてのADグループを見つける必要があります。クエリを制限するには、以下に示すようにDNを提供するSearchBase
パラメータを使用します。 LocationsOU内のすべてのグループが返されます。
ただし、LocationsOUの下にあるすべてのOU内のすべてのグループを検索する必要があります。 Get-ADGroup
は、ロケーションOU自体のグループのみを返します。子OUは返しません。
子OU内のグループを返すには、SearchScope
パラメーター。このパラメータは、子オブジェクトも検査するという点でRecursive
パラメータに似ています。
たとえば、ロケーションOUの下の任意のOU内のすべてのグループを検索するには、 Subtree
または2
を指定します。 SearchScope
のこの値は、Get-ADGroup
に、すべての子、孫、およびダウンOUを再帰的に確認するように指示します。
SearchScope
パラメータオプションの完全な内訳については、Get-ADGroup
のドキュメントを参照してください。
ADグループとメンバーのエクスポート
これで、必要なグループとグループメンバーをクエリして返す方法がついにわかりました。この情報はすべてPowerShellコンソールに送信されます。ただし、この情報をCSVファイルまたはExcelワークシートとして取得する必要があります。
ここで行う必要があるのは、すべての情報をファイルに送信することだけです。
へのエクスポートCSV
AD情報をエクスポートする一般的な形式の1つは、CSVです。 PowerShellには、Export-Csv
というPowerShell出力からCSVファイルを簡単に作成できる便利なコマンドレットがあります。
この記事で説明する任意のコマンドからCSVファイルを作成できます。 Export-Csv
にパイプします。以下の例を使用すると、Get-AdGroup
がコンソールに返すすべての出力をCSVファイルにリダイレクトします。
この便利なコマンドレットの詳細については、Export-Csv:CSVファイルをファーストクラスの市民として扱うPowerShellの方法をご覧ください。
Excelへのエクスポート
PowerShellには、情報をExcelにエクスポートするネイティブな方法がありません。ただし、ImportExcelと呼ばれる無料のコミュニティモジュールはいつでもダウンロードできます。このモジュールは、CSVのようなエクスポート機能をExcelワークシートに直接もたらします。 PowerShellモジュールをインストールするには、Install-Module ImportExcel -Scope CurrentUser
を実行します。
上記の例を使用すると、CSVファイルの代わりに、グループをExcelワークシートにエクスポートする必要があります。次に示すように、Export-Excel
コマンドレットを使用します。
ImportExcelモジュールには、機能する機能がたくさんあります。 Excelで。より洗練されたワークシートが必要な場合は、おそらく機能があります。
ImportExcelモジュールの使用の詳細については、この記事を参照してください。処理できるいくつかの一般的なユースケースの優れた紹介を提供します。
結論
2つのPowerShellコマンドレットを使用するだけで、次のことができます。 ADグループのほぼすべて。この記事は、利用可能な機能の紹介にすぎませんでした。ここで収集した知識を使用し、記事のより深い主題の詳細へのリンクのいくつかをたどって、何を構築できるかを確認してください!