PowerShell で Active Directory ユーザーのクエリを実行する

Marion Paul Kenneth Mendoza 2023年6月21日
  1. Active Directory モジュールをインストールする
  2. Get-ADUser コマンドレットを使用して、PowerShell で Active Directory ユーザーにクエリを実行する
PowerShell で Active Directory ユーザーのクエリを実行する

Windows PowerShell を使用すると、Active Directory (AD) コンポーネントを簡単に管理できます。 ユーザー、コンピューター、グループなどの Active Directory オブジェクトの管理など、AD のあらゆる機能を処理できます。

この記事では、Active Directory オブジェクトの 1つを操作する方法を調べ、Windows PowerShell Active Directory モジュールを使用して Active Directory ユーザーを管理する方法について説明します。

Active Directory モジュールをインストールする

通常、Windows PowerShell コマンド Install-Module を実行すると、リモート CDN からパッケージが取得され、マシンにインストールされます。

それでも、Active Directory モジュールでは、これを成功させるために、RSAT またはリモート サーバー管理ツールと呼ばれる前提条件のパッケージを確立する必要があります。

コンピューターまたはサーバーに RSAT をインストールするために、以下の PowerShell スクリプトを実行する場合があります。

Windows 10 以降の RSAT をインストールします。

Add-WindowsCapability -Name Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0 -Online

Windows Server 用の RSAT をインストールします (Windows Server 2008 以降の複数のビルド):

Install-WindowsFeature -Name "RSAT-AD-PowerShell" -IncludeAllSubFeature

コンピューターに RSAT 機能をインストールすると、PowerShell 用の Active Directory モジュール (AD モジュール) もインストールされ、Active Directory ドメイン サービスを管理できるようになります。

Get-ADUser コマンドレットを使用して、PowerShell で Active Directory ユーザーにクエリを実行する

Active Directory モジュールがインストールされると、次の構文で Active Directory モジュールをインポートできるようになります。 Import-Module コマンドには ipmo というエイリアスがあり、モジュールをインポートする際の優れた代替手段としても使用できます。

ipmo activedirectory

Get-ADUser コマンドは、ドメイン ユーザーを検索するために可能な限り多くのオプションと情報を提供するコマンドです。 NT ID または検索するユーザー名が既にわかっている場合は、Identity パラメータを使用できます。

以下に、さまざまな識別子を使用してユーザー アカウントを検索する例をいくつか示します。

コード例:

Get-ADUser -Identity jdoe101

出力:

DistinguishedName : CN=John Doe,OU=IT,DC=pureorg,DC=local
Enabled           : False
GivenName         : John
Name              : John Doe
ObjectClass       : user
ObjectGUID        : b98fd0c4-3d5d-4239-8245-b04145d6a0db
SamAccountName    : jdoe101
SID               : S-1-5-21-4117810001-3432493942-696130396-3142
Surname           : Doe
UserPrincipalName : jdoe101@pureorg.local

AD ユーザー アカウントのフィルター処理

複数のドメイン ユーザーを検索する必要がある場合、または識別子がわからない場合は、フィルターを使用します。

各フィルター パラメーターを使用すると、検索クエリを絞り込む条件ステートメントを実行できます。 この場合、この条件が満たされると、Get-ADUser コマンドはその検索条件に一致するユーザー アカウントを表示します。

ユーザーをフィルタリングするパラメーターは、Filter パラメーターと呼ばれます。 Filter パラメーターは、その文字通りの名前から、Windows PowerShell の Where-Object コマンドレット フィルター構文に非常によく似た条件を作成できます。

以下の例は、Filter パラメータの優れた例です。 この例では、アクティブ ディレクトリ属性 (givenName) を表示し、それを条件ステートメントの一部として定義します。

フィルターは、ユーザーが Albert と等しい givenName を持っている場合にのみ戻ることを許可します。

コード例:

Get-ADUser -Filter "givenName -eq 'Albert'"

出力:

DistinguishedName : CN=AlBernard,OU=Accounting,DC=mylab,DC=local
Enabled           : False
GivenName         : Albert
Name              :  Bernard
ObjectClass       : user
ObjectGUID        : 8ec5ef2a8-1fdb-42ab-9706-b1e6356dd456
SamAccountName    : AlBernard
SID               : S-1-5-21-4117810001-3432493942-696130396-3163
Surname           : Bernard
UserPrincipalName :  AlBernard

組織単位でユーザーを検索する

PowerShell は、ID またはフィルターを提供することにより、条件に一致するすべてのドメイン ユーザーを返します。 組織単位または OU に限定されません。

SearchBase パラメーターを使用して組織単位でフィルター処理するには、Get-ADUser の条件ステートメントを設定する必要があります。

SearchBase パラメーターは、特定の OU 内のユーザー アカウントの検索を開始する機能を提供します。 SearchBase パラメータは、組織単位の識別名 (DN) を取ります。

たとえば、以下に示すように、Users OU 内のすべてのユーザーを見つけることができます。 *Filter を使用すると、すべてのユーザー アカウントに一致することを意味します。

コード例:

Get-ADUser -Filter * -SearchBase 'OU=Users,DC=domain,DC=local'

おそらく、1つの OU 内のユーザー アカウントのみを検索し、子 OU を除外したいでしょう。 その場合、SearchBase および SearchScope パラメータを使用できます。

SearchScope パラメーターは、OU 階層で検索する深さを定義します。

たとえば、組織単位とすべての子組織単位のすべてのユーザー アカウントを検索する場合は、SearchScope 値に 1 を使用します。 一方、すべての子 OU と孫 OU を検索する場合は、2 を使用します。

以下の例では、Users 組織単位とその下のすべての子 OU 内のユーザー アカウントを検索します。

コード例:

Get-ADUser -Filter * -SearchBase 'OU=Users,DC=domain,DC=local' -SearchScope 2

ユーザーのプロパティを取得する

Get-ADUser を実行すると、いくつかの属性のみが返されることがすぐにわかります。 また、出力が Select-Object -Property * にパイプされた場合でも、まだすべての詳細が返されないことに気付くでしょう。

Property パラメーターを使用して、Windows PowerShell から Active Directory ユーザー属性を取得できます。 このパラメーターは、出力に表示する 1つ以上のコンマ区切りの機能を受け入れます。

以下のコード スニペットの例では、コマンド Get-ADUser を使用して、givenNameAdam であるすべてのユーザー アカウントのすべてのプロパティを検索します。 残念ながら、出力は省略されていますが、電子メール アドレス、パスワード プロパティなどの他のおなじみの属性が表示されます。

コード例:

Get-AdUser -Filter "givenName -eq 'Adam'" -Properties *

出力:

AccountExpirationDate                :
accountExpires                       : 9223372036854775807
AccountLockoutTime                   :
AccountNotDelegated                  : False
AllowReversiblePasswordEncryption    : False
AuthenticationPolicy                 : {}
AuthenticationPolicySilo             : {}
BadLogonCount                        : 0
badPasswordTime                      : 0
badPwdCount                          : 0
CannotChangePassword                 : False
CanonicalName                        : mylab.local/Accounting/ADBertram
<SNIP>
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn

関連記事 - PowerShell Directory