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 を指定すると最終ログオン日時が取得できます。
(NTタイムエポックというらしい)
LargeInteger 型は HighPart プロパティに整数の上位部分、LowPart プロパティに下位部分の値が格納されています。
以下の数式に従うことで、LargeInteger 型の本来の値を求めることができます。
largeInt = HighPart * 2^32 + LowPartということで、lastLogon 属性値から日本時間で最終ログオン日時を求める手順は以下のようになります。
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 ⇨ OU=Users,OU=All Resources
例2)ドメイン example.jp ⇨ 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