メイン画像

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 エントリ表示名称
mail メールアドレス
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 属性値から日本時間で最終ログオン日時を求める手順は以下のようになります。

  1. 100ナノ秒間隔の整数を求める(LargeInteger 型から本来の値を求める)

    nsec = .HighPart * (2^32) + .LowPart
  2. 日時(UTC)を求める

    utc = (nsec / (60 * 10000000) / 1440) + #1/1/1601#
  3. 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=johnOU=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

アカウントを作成 して、もっと沢山の記事を読みませんか?


この記事が気に入ったら ことりと さんを応援しませんか?
メッセージを添えてチップを送ることができます。


この記事にコメントをしてみませんか?


酒とアクアリウムが最近の楽しみ。

おすすめの記事