いまさらですが… Windows Server 2008 RTMでユーザーの属性を取得する方法

以前の投稿で、ユーザーに割り当てられている細かい設定が可能なパスワードポリシー(FGPP)を一覧表示する方法を
PowerShellスクリプトで紹介しました。ただ、前回紹介した方法はActive Directoryの
PowerShellモジュールを使うという、Windows Server 2008 R2でなければできない方法だったので、
Active Directory用PowerShellモジュールが使えない、Windows Server 2008 RTMでは
どうやってユーザーに割り当てられている属性を調べればよいのですか?
そして、ユーザーに割り当てられているFGPPはどうやって調べればよいのですか?
というご質問をいただきました。

Windows Server 2008 RTMには、Active Directoryにアクセスするためのコマンドレットがないため、
ADSIというインターフェイスを使ってActive Directoryにアクセスするという面倒くさい方法をとらなければなりません。
ADSIを使ってActive Directoryにアクセスし、ユーザーの情報を取得・表示させます。
スクリプトはこちら。


$DSSearcher = New-Object DirectoryServices.DirectorySearcher
$DSSearcher.Filter = “(objectClass=User)”
$Users=$DSSearcher.FindAll()
Foreach ($User in $Users){
If ($User.Properties.sAMAccountName –notlike “*$”){
  Write-Host ———————————
  $User.Properties

}
}

 

簡単に説明すると、1行目でDirectoryServices.DirectorySearcherクラスのオブジェクトを作成しています。
DirectorySearcherクラスはActive Directoryに対するクエリを実行するクラスなので、
2行目では「検索条件」を指定しています。
(ダブルクォーテーション内に入っているのはLDAPクエリです。ここでは、「すべてのユーザー」を条件に指定しています。
LDAPクエリの書き方にはついては別の機会にでも..)
3行目でクエリを実行し、Active Directoryのすべてのユーザーの情報を取得しています。
そして4行目からは、取得したユーザーの情報をひとつずつ取り出し、画面に出力しています。
5行目で $User.Properties.sAMAccountName –notlike “*$” としているのは、
2行目で「すべてのユーザー」を検索条件に入れてもコンピューターアカウントがクエリの結果に含まれてしまうので、
コンピューターアカウントを除外するように条件設定しています。
(コンピューターアカウントは必ずアカウント名の最後が$になるので、$が含まれるアカウントを除外しています)

ここまでの結果、ご覧のような情報を参照することができます。

msds1

今画面で見てもらっているのは、上記のスクリプトを実行した結果で、Administratorユーザーの属性一覧が出ています。
このうち、msds-psoappliedという部分を見てもらうと、AdministratorユーザーにどのようなFGPPが割り当てられているか
確認できます。
今回はすべての属性が見えるようにスクリプトを作りましたが、FGPPの割り当て状況だけ見たければ、
特定の属性だけが表示されるようにカスタマイズして使ってもらってもよいですね。

■関連ページ
TechNetスクリプトセンターにスクリプトを投稿しました
細かい設定が可能なパスワードポリシーが割り当てられたユーザーを一覧表示