DirectorySearcher.PropertiesToLoad の使い方。First Name と Last Name を PowerShell で参照する。

System.DirectoryServices.DirectorySearcherクラスは ActiveDirectory を検索する時にとても便利なのですが、明示的に指定しない限り基本的なプロパティしか取得できません。

たとえば姓(Last Name)と名(First Name)などは PropertiesToLoad プロパティを使って明示的に指定する必要があります。

Microsoftの解説は一応あるのですが、ざっくりしすぎているので使い方を把握するのが大変…。下記は自分用のメモです。

DirectorySearcherの基本的な使い方は他のサイトを参照。

PowerShellで書いた使い方の例。FindAllを行う前にプロパティ名をAddする。

$searcher.PropertiesToLoad.Add("プロパティ名")
$results = $searcher.FindAll()

読み込み: 同じプロパティ名で参照できる。

foreach( $userObject in $results){
Write-host $userObject.properties["プロパティ名"]
}

ハマりやすい注意点:

  • このプロパティ名は小文字であることが必須の模様。
  • 1つでもAddすると、これまでデフォルトで参照できた他の全てのプロパティが出てこなくなる。基本的な name, samaccountname なども追加する必要あり。

下記は姓(SN)、名(GivenName)、W2Kログイン名(SAMAccountName)をリストアップする例。

$propList = "samaccountname","sn","givenname"
foreach ( $p in $propList ){ $searcher.PropertiesToLoad.Add($p) }
$results = $searcher.FindAll()
foreach ($userObject in $results)
{
    Write-Host "ログイン名 $($userObject.properties.samaccountname)"
    Write-Host "姓 $($userObject.properties.sn)"
    Write-Host "名 $($userObject.properties.givenname)"
}