Get-AdUser: PowerShellを使用してActive Directoryユーザーを監査する方法

PowerShellはIT管理者にとって不可欠なツールであり、Get-AdUserコマンドを使用してActive Directoryユーザーアカウントを簡単に監査できます。このガイドでは、人気のあるActive Directory cdmdletを使用して始める方法について詳しく説明します。

Get-AdUser PowerShell cmdletの紹介

 Get-AdUser cmdletは最も人気のあるActive Directory PowerShell cmdletsの1つです。指定されたユーザーオブジェクトを取得したり、複数のユーザーオブジェクトを取得するためにカスタマイズ可能な検索を実行したりできます。

広告

 Identityパラメータは取得するActive Directoryユーザーを指定するために使用されます。ユーザーを識別する方法にはいくつかのオプションがあります:

  • 識別名(DN)、GUID、セキュリティ識別子(SID)、またはセキュリティアカウントマネージャー(SAM)アカウント名を使用できます。
  • また、パラメータをユーザーオブジェクト変数(たとえば$UserA)に設定したり、ユーザーオブジェクトをパイプライン経由でIdentityパラメータに渡したりすることもできます。

FilterまたはLDAPFilterパラメータを使用して1つ以上のユーザーを検索して取得することができます。 FilterパラメータはPowerShell Expression Language(PSL)を使用してActive Directoryをクエリするために使用されます。

PowerShellの式言語構文は、Filterパラメーターで受け入れられる値タイプに対する豊富な型変換サポートを管理者に提供します。既にLightweight Directory Access Protocol(LDAP)クエリ文字列を持っている場合は、LDAPFilterパラメーターを使用してください。

明示的に設定されたパラメーターがない場合、Get-AdUserはデフォルトのユーザーオブジェクトプロパティセットを表示します。追加のプロパティを取得するには、Propertiesパラメーターを使用してください。後の記事で使用できるいくつかのパラメーターについて説明します。

広告

Get-AdUserの使用方法と前提条件

Get-AdUserや他のActive Directory関連のPowerShellコマンドを使用する前に、ワークステーションにActive Directoryモジュールがインストールおよびロードされていることを確認する必要があります。実行しているWindowsのバージョンに基づいて、cmdletをインストールする方法がさまざまあります。

簡潔にするため、オンプレミスのActive Directoryを管理する管理者やITプロが通常実施するであろう2つの最も一般的な方法について説明します。

まず、次のPowerShellコマンドを使用して、リモートサーバー管理ツール(RSAT)ツールを直接Windows Updateからインストールできます。

Add-WindowsCapability –online –Name "Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0"

第2の方法は、設定アプリを使用してRSATツールを直接インストールする方法です。クリック開始->設定 ->アプリ ->オプション機能 ->機能を追加 -> そしてRSAT:Active Directory Domain ServicesおよびLightweight Directory Services Toolsのオプションにチェックマークを入れてください。

広告

「インストール」ボタンをクリックしてください。

-Identityパラメータを使用してADユーザーアカウントを見つける方法

さて、cmdletを使用して、ニーズに合った情報を素早くかつ効率的に取得するのにどのように役立つかを示しましょう。私はWindows Server 2022 Active DirectoryのHyper-Vラボ環境で作業しており、Windows 10 21H1クライアント仮想マシン(VM)にログインしています。 ‘Active Directory Module for Windows PowerShell’を「管理者として実行」して開きました。

Active Directory Module for Windows PowerShell

まず、sAMAccountName属性に基づいてドメインユーザーを見つけることから始めましょう

Get-ADUser breinders
Finding a user account via their sAMAccountName

そこにあります。これで、objectGUID(またはGUID)属性を使用してユーザーを見つけることができます。試してみましょう:

Get-ADUser bdcaaf45-e993-4be7-83d2-c1d280edc250
Finding an account via their objectGUID (GUID)

ああ、同じユーザーアカウントですね。素晴らしい。私たちはユーザーをセキュリティ識別子またはSIDに基づいて検索することもできます。

Get-ADUser S-1-5-21-3437955921-3370966048-1812589592-1107
Finding an account via their Security IDentifier (SID)

はい、少し繰り返しになりますが、ポイントはわかりますね。姓、名前、UserPrincipalNameなど、ユーザーの情報を使用することもできます。

Get-AdUserフィルターを使用する

大規模な環境では、’Get-AdUser’と単独で入力することはお勧めしません。なぜなら、それは接続されたADドメイン内のすべてのユーザーオブジェクトを取得し始めるからです。これにより、コンソールがデータで溢れ、使用しているドメインコントローラーにも noticeable strainをかける可能性があります。

もし、全ユーザーベースをフィルタリングして特定のプロパティに基づいてユーザーを検索できればいいのに、と思いませんか。それが ‘ -filter ‘ パラメーターの役割です!

‘ -filter ‘ パラメーターは、ADオブジェクトを取得するクエリ文字列を指定します。この文字列はPowerShell Expression Language(PEL)構文を使用します。PEL構文は、Filterパラメーターによって受け取られる値型に対する豊富な型変換サポートを提供します。この構文は順序表現を使用しており、演算子はオペランドと値の間に配置されます。いくつかの例を通して理解を深めましょう。

まずは、’有効’なすべてのアカウントを見つけてみましょう。

Get-ADUser -filter {Enabled -eq "true"} | ft
Locating all the enabled accounts

私たちは、’Enabled’フィールドがTrueに等しいすべてのアカウントを見つけるために、その素晴らしいPEL構文を使用しています。また、出力を簡単に読みやすい表示フォーマットにするために、Format-Table PowerShell cmdletを使用しています。

次に、メールアドレスを持つすべてのユーザーを表示しましょう。

Get-ADUser -Filter {mail -ne "null"} -Properties Name,GivenName,mail| ft Name,GivenName,mail
Finding all the user accounts with an email address

まず、’null’のメールアドレスを持たないユーザーアカウントのみを含めるために、’filter’パラメーターを使用していることに注意してください。つまり、メールアドレスを持つすべてのアカウントです。コンピュータのように考えようとするのは時々難しいですね。

次に、名前、与えられた名前、およびメールアドレスの3つのプロパティに焦点を当てています。Format-Tableを使用して、それらのプロパティをリストアップしています。簡単な作業ですね!

セキュリティの観点からアカウントを監査したい場合もあります。’passwordneverexpires’属性を持つすべてのアカウントを見つけるために’filter’パラメーターを使用することもできます。これは通常推奨されるものではありません。

名前がlikeのGet-AdUser?

別の素敵な機能は、-filterと各種パラメーターを使用して、ADユーザーオブジェクトのさまざまなプロパティに合致する特定のユーザーのみを見つけることができます。私のラボ環境は非常に小さく、約10のユーザーアカウントしかありませんが、探しているアカウントを非常に迅速に見つける柔軟性とパワーを示すことができます。ここでは、名前に’Reinders’が含まれるすべてのユーザーを見つけましょう。

Get-ADUser -Filter {name -like "*Reinders*"} -Properties * | ft Name,EmailAddress

私たちは「名前」パラメータを使用して、「Reinders」を名前のどこかに含むすべてのアカウントを検索しています。それは彼らの名前、姓、さらには入力されている場合はミドルネームであってもかまいません。Reindersをとして持つユーザーのみを見つけたい場合は、「-like」フィールドを“*Reinders”に変更してください(注意:フィールドの末尾にはアスタリスク(*)がありません)。

組織単位によるGet-AdUser検索範囲の制限

比較的大規模なドメイン/エンタープライズをお持ちの場合、これらのコマンドを実行する際にクエリ時間が長くなったり、ドメインコントローラーに不必要なパフォーマンスへの影響が出る可能性があります。これらの検索の範囲を特定の組織単位(OU)に制限する方法について話しましょう。

「-SearchBase」パラメータを使用して、OU(または複数のOU)を指定することができます。次の構文を使用します。

Get-ADUser -SearchBase 'OU="Test Users",DC=reinders,DC=local' -filter * -Properties Name,EmailAddress | ft Name,EmailAddress
Here, we’re limiting the search scope to the ‘Test Users’ Organization Unit (OU)

ここでは、「Test Users」OU内のすべてのユーザーの範囲を制限し、その名前とメールアドレスを表形式で出力しています。

代替資格情報を使用してGet-AdUserを使用する

デフォルトでは、Get-AdUserコマンドレットは現在ログオンしているユーザーのコンテキストで実行されます。代替資格情報でコマンドを実行したい場合は、変数を使用して代替資格情報を格納し、その変数を使用してコマンドを実行する際に「-Credential」スイッチを使用できます。

$cred = Get-Credential Get-ADUser -Credential $cred -Filter {name -like "*Reinders*"} -Properties * | ft Name,EmailAddress

再度、簡単でわかりやすいですね!

Get-AdUserプロパティパラメータとの作業

I’ve shown a few examples of the ‘-Properties’ parameter, but let’s take a step back and explain it a bit.

「-Properties」パラメータは、サーバーから取得する出力オブジェクトのプロパティを指定します。デフォルトでは使用しない場合、10個のプロパティが返されて表示されます。DistinguishedName、アカウントが「Enabled」または「Disabled」かどうか、ユーザーのGivenName、Name、GUID、およびその他のシステムのような属性などが含まれます。しかし、利用可能なプロパティはかなりあります。このパラメータを使用して、デフォルトのセットに含まれていないプロパティを取得します。

このパラメータのプロパティを指定するには、名前のコンマ区切りリストを指定します。オブジェクトに設定されているすべての属性を表示するには、*(アスタリスク)を指定します。

これらの他のプロパティにアクセスするには、該当するプロパティを単に指定します。デフォルトまたは拡張プロパティでないプロパティの場合、属性のLightweight Directory Access Protocol (LDAP)表示名を指定する必要があります。

いくつかの例を見てみましょう。

Get-ADUser -filter * -Properties Name,PasswordLastSet | ft Name,PasswordLastSet
Displaying all users with the date and time their password was last set/reset

上記の例は、ドメイン内のすべてのユーザーの名前と、彼らのパスワードが最後に設定/リセットされた日時を表示しています。

Get-ADUser -filter * -Properties Name,whencreated | ft Name,WhenCreated
Another nice feature is listing every user’s Creation Date in Active Directory

これは、Active Directoryでアカウントが作成された日時を示しています。ここで、各アカウントの名前、部門、およびマネージャーを取得するクエリを終えましょう。

Get-ADUser -filter * -Properties Name,Department,Manager | ft Name,Department,Manager
Listing the Department and the Manager of each user, if they’re populated in Active Directory

Export-Csvコマンドの最後の例として、素晴らしい活用例があります。ドメイン内のすべてのユーザーとそのすべてのプロパティをリストアップしたい場合は、このコマンドを実行して便利なCSVファイルにすべてをエクスポートしてください。

Get-ADUser -filter * -properties * | Export-CSV c:\temp\Users.csv

サマリー

I hope you gained some knowledge about how to use the Get-AdUser PowerShell command. This really scratches the surface, however, this is one aspect I like about the power of PowerShell: Learning about the core properties of a cmdlet and extrapolating it out to your organization.

たいてい、このコマンドを使用して問題を解決したり、他のエンジニアのために文書を作成したり、全体のトラブルシューティングプロセスに役立てる様々なユースケースを考えることが驚くほど簡単です。それは非常に便利です。もちろん、これらのコマンドを使用してPowerShellスクリプトを生成すると、常に効率が上がります!

質問やコメントがあれば、お気軽に以下にお書きください。

関連記事:

Source:
https://petri.com/get-aduser-how-to-audit-active-directory-users-with-powershell/