仕事とかで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