VBScript - Active Directory からユーザー情報を取得する
VBScript - Active Directory からユーザー情報を取得する
Active Directory からユーザー情報を取得するには、GetObject 関数に LDAP 識別名を指定します。
サンプルスクリプト
以下のスクリプトは、Active Directory から取得したユーザー情報を表示します。
取得する情報は、ドメイン example.jp にある組織単位が Users 配下の All Resources 配下に属するユーザー john を対象としています。
Dim user
Set user = GetObject("LDAP://CN=john,OU=Users,OU=All Resources,DC=example,DC=jp")
'ログオン名
WScript.Echo user.Get("sAMAccountName")
'名前
WScript.Echo user.Get("cn")
'エントリ表示名称
WScript.Echo user.Get("displayName")
'メールアドレス
WScript.Echo user.Get("mail")
'最終ログオン日時
With user.Get("lastLogon")
WScript.Echo DateAdd("h", 9, ((.HighPart * (2^32) + .LowPart) / (60 * 10000000) / 1440) + #1/1/1601#)
End With
サンプルスクリプトの説明
Active Directory からユーザー情報を取得するために、GetObject 関数に “LDAP://” + LDAP 識別名を指定します。
Set user = GetObject("LDAP://CN=john,OU=Users,OU=All Resources,DC=example,DC=jp")
取得したユーザー情報から目的のデータを得るには、Get に属性名を指定します。
たとえば、ユーザーのログオン名を取得するには属性名に sAMAccountName を指定します。
WScript.Echo user.Get("sAMAccountName")
指定できる属性の例です。
属性名 | 内容 |
---|---|
sAMAccountName | ログオン名 |
cn | 名前 |
displayName | エントリ表示名称 |
メールアドレス | |
lastLogon | 最終ログオン日時 |
sn | 名前(姓) |
givenName | 名前(名) |
Active Directory で定義されているすべての属性は、以下のページから確認できます。
すべての属性 - Win32 apps | Microsoft Learn
補足)最終ログオン日時の求め方
属性に lastLogon を指定すると最終ログオン日時が取得できます。
ですが返ってくる値は、1601年1月1日(UTC)以降の 100 ナノ秒間隔の数を格納した LargeInteger 型の値です。
そのままでは日時として利用できません。
(NTタイムエポックというらしい)
LargeInteger 型は HighPart プロパティに整数の上位部分、LowPart プロパティに下位部分の値が格納されています。
以下の数式に従うことで、LargeInteger 型の本来の値を求めることができます。
largeInt = HighPart * 2^32 + LowPart
ということで、lastLogon 属性値から日本時間で最終ログオン日時を求める手順は以下のようになります。
-
100ナノ秒間隔の整数を求める(LargeInteger 型から本来の値を求める)
nsec = .HighPart * (2^32) + .LowPart
-
日時(UTC)を求める
utc = (nsec / (60 * 10000000) / 1440) + #1/1/1601#
-
9時間進めて日本時間(JST)を求める
jst = DateAdd("h", 9, utc)
LDAP識別名とは
- LDAP識別名
-
複数の「LDAP相対識別名」をカンマで区切って並べたものです。
LDAP相対識別名は Active Directory のツリー構造に従い、下位から上位へと属性を並べます。「識別名(DN:Distinguished Name)」とも言います。
例:CN=john,OU=Users,OU=All Resources,DC=example,DC=jp
- LDAP相対識別名(RDN:Relative Distinguished Name)
-
「属性名=値」の形式を持つもの。
例:LDAP識別名に含まれる
CN=john
やOU=Users
などActive Directory で利用される属性名には、次のようなものがあります。
- CN → 名前(ユーザー名、グループ名、コンピューター名など)
- OU → 組織単位
- DC → ドメイン
階層の深さに合わせて、同じ属性をカンマで区切って並べます。
同じ属性は左から右に向かって解釈します。例1)組織単位 Users 配下の All Resources ⇨
例2)ドメイン example.jp ⇨OU=Users,OU=All Resources
DC=example,DC=jp
ログインユーザーの LDAP 識別名を取得するには
ADSystemInfo オブジェクトを使って、現在ログインしているユーザーの LDAP 識別名を取得できます。
With CreateObject("ADSystemInfo")
WScript.Echo "UserName:", .UserName
WScript.Echo "ComputerName:", .ComputerName
End With
スクリプトを実行すると、次のような内容が表示されます。
UserName: CN=john,OU=Users,OU=All Resources,DC=example,DC=jp
ComputerName: CN=my-host-name,OU=Computers,OU=All Resources,DC=example,DC=jp
自分自身の情報を取得するのであれば、ADSystemInfo オブジェクトを使って簡単に取得できますね。
With CreateObject("ADSystemInfo")
With GetObject("LDAP://" & .UserName)
WScript.Echo .Get("displayName")
End With
End With
アカウントを作成 して、もっと沢山の記事を読みませんか?
この記事にコメントをしてみませんか?