【PowerShell】Active Directoryモジュールがない環境でActive Directoryのユーザー情報を取得する

Active Directory ドメインサービス(以下、AD)のユーザー情報を取得する際、Active Directoryモジュールを使用してユーザー情報を取得することがあると思いますが、顧客環境などの理由によりモジュールのインストールが難しい場合があります。

本記事では、Active Directoryモジュールをインストールせずに、ADのユーザー情報を取得する方法をご紹介します。

実行環境

  • Windows Server 2022
  • Windows PowerShell 5.1

フィルターを使用してユーザー情報を取得する

コード

$searcher = New-Object System.DirectoryServices.DirectorySearcher
$searcher.Filter = "(sAMAccountName=user01)"
$result = $searcher.FindOne()
$result.Properties

解説

$searcher = New-Object System.DirectoryServices.DirectorySearcher

System.DirectoryServices名前空間のDirectorySearcherクラスを使用して、オブジェクトを作成しています。

これにより、AD内のオブジェクトを検索するための機能が得られます。

$searcher.Filter = "(sAMAccountName=user01)"

ここでは例として、sAMAccountNameがuser01に一致するユーザーを検索するためのフィルタリング条件を設定しています。

LDAP(Lightweight Directory Access Protocol)に基づく構文を使用しており、LDAP検索フィルターを使用することで検索やフィルタリングを効率的に行うことができます。

$result = $searcher.FindOne()

FindOne()メソッドは、指定したフィルタにマッチする最初のオブジェクトを取得します。一致するオブジェクトが見つからなかった場合、$userの値は$nullとなります。

FineAll()メソッドを使用すると、指定したフィルタにマッチする全てのオブジェクトを取得できます。

$result.Properties

取得したユーザーオブジェクトからプロパティを表示します。

実際の実行結果の例です。

プロパティを指定してユーザー情報を取得する

環境によっては、基本的なプロパティしか取得できません。

そこで、指定したプロパティを取得するコードをご紹介します。

コード

$searcher = New-Object System.DirectoryServices.DirectorySearcher
$searcher.Filter = "(sAMAccountName=user01)"
$searcher.PropertiesToLoad.Add("givenname")
$result = $searcher.FindOne()
$result.Properties

解説

$searcher.PropertiesToLoad.Add("givenname")

ここでは例として、givenname(名)を結果に追加するよう設定しています。

取得したいプロパティ名を例のように記載することで結果に含めることができます。

Addすると、結果に戻り値が表示されます。

不要な場合は以下のように[void]を付けることで出力されなくなります。

[void]$searcher.PropertiesToLoad.Add("givenname")

注意点

1つでもAddを行うとデフォルトで取得できたプロパティが取得できなくなってしまうため、他のプロパティも取得したい場合は以下のように全てAddする必要があります。

$searcher = New-Object System.DirectoryServices.DirectorySearcher
$searcher.Filter = "(sAMAccountName=user01)"
$propertyList ="sn","givenname","mail"
foreach ( $p in $propertyList ){
    [void]$searcher.PropertiesToLoad.Add($p)
}
$result = $searcher.FindOne()
$result.Properties

実際の実行結果の例です。

さいごに

本記事では、Active Directoryモジュールがない環境でADのユーザー情報を取得する方法をご紹介しました。

LDAP検索フィルターは、今回ご紹介した条件より複雑な条件を記述することもできますので、用途によって書き換えてみてください。

この記事が参考になれば幸いです。

参考資料

learn.microsoft.com

learn.microsoft.com

執筆担当者プロフィール
岡田 弥侑

岡田 弥侑(日本ビジネスシステムズ株式会社)

Data&AI本部所属。主にPowerShellでの開発を行っています。

担当記事一覧