仕事とかでActive Directoryとかをいじったりするのだが、Windows ServerってPowerShellをリモートから操作できるようにしてないと、RDPでつなげてコマンドを打たなくてならず、色々とまどろっこしい事が多い。 RDPで接続したとしても、GUIでリストの確認ができるのならまだ納得感はあるのだけど…。

で、やはりちょっと面倒だったりするので、UNIX環境からリモートで一覧を取得してやることにしたのだが、どうもLDAPで管理されている日付データというのが「1601/01/01 00:00:00からの経過時間を100ナノ秒単位」で表しているようで、そのままだと正直わけがわからない。 なので、とりあえず今回はawkを使って無理やり日付を読める形式に変換して、一覧にすることにした。 今回はユーザ名・最終パスワード変更日を抽出している。

ldapsearch -x -D "cn=Administrator,cn=Users,dc=domain,dc=local"                \
           -W -H ldap://LDAP-SERVER -b "DC=domain,DC=local" cn pwdlastset | \
grep -e ^pwdLastSet -B1                                                        | \
awk '/^cn|^pwdLastSet/{if(/^pwdLastSet/ && $2!=0){print strftime("%Y-%m-%d_%H:%M:%S",int(($2/10000000)-11644473600))}else{print $2}}' | \
paste - - | column -t

$ ldapsearch -x -D "cn=Administrator,cn=Users,dc=blacknon,dc=local"                \
>            -W -H ldap://172.21.XXX.XXX -b "DC=blacknon,DC=local" cn pwdlastset | \
> grep -e ^pwdLastSet -B1                                                        | \
> awk '/^cn|^pwdLastSet/{if(/^pwdLastSet/ && $2!=0){print strftime("%Y-%m-%d_%H:%M:%S",int(($2/10000000)-11644473600))}else{print $2}}' | \
> paste - - | column -t
Enter LDAP Password:
FreeNAS         2016-09-18_11:40:10
krbtgt          2016-01-17_22:57:01
bs-pub-product  2016-05-15_23:20:56
Guest           0
Hime            2016-11-04_18:30:53
Redmine         2016-09-18_11:22:14
BS-PUB-DOMAINC  2016-01-17_22:57:01
Administrator   2017-06-03_09:56:30
Blacknon        2016-09-28_09:31:07
BS-PHY-STOR-01  2017-05-28_16:30:58