ActiveDsからメールアドレスを取得する方法

解決


とも  2010-02-08 21:45:17  No: 146737  IP: 192.*.*.*

ADに設定されているメールアドレスの情報を取得しようと四苦八苦しています。
以下のようにしてユーザーは取得できるのですが、IADsUser にあるメールアドレスの内容を表示されません。
使い方が間違っているのでしょうか?

ActiveDs.IADsUser = GetObject("WinNT://ドメイン/ユーザID,user")

編集 削除
オショウ  2010-02-09 01:26:59  No: 146738  IP: 192.*.*.*

多分、これじゃ〜ないかな?

http://garfie.weblogs.jp/life_of_dev/2008/12/activedirecto-1.html

以上。

編集 削除
aetos  2010-02-09 09:58:33  No: 146739  IP: 192.*.*.*

> IADsUser にあるメールアドレスの内容を表示されません。

とはどういう状態?

IADsUser::get_EmailAddress では取得できませんか?

編集 削除
aetos  2010-02-09 09:59:04  No: 146740  IP: 192.*.*.*

間違えた…ここ VB 掲示板だった。
先の投稿は忘れてください。

編集 削除
魔界の仮面弁士  2010-02-09 11:27:58  No: 146741  IP: 192.*.*.*

> ActiveDs.IADsUser = GetObject("WinNT://ドメイン/ユーザID,user")

WinNTプロバイダでは、ActiveDs.IADsUser.EmailAddress や
ActiveDs.IADsUser.Get("EMailAddress") は利用できないようです。
http://blogs.wankuma.com/chuki/archive/2008/04/10/132523.aspx

代わりに、LDAP の方を使ってみてください。

GetObject("LDAP://CN=Osawa, CN=Users, DC=example, DC=co, DC=jp")
GetObject("LDAP://CN=テスト ユーザー,CN=Users,DC=Sample,DC=local")

あるいは、

Dim ds As New DataSet
Dim adp As New OleDb.OleDbDataAdapter( _
    "<LDAP://CN=Users,DC=ドメイン,DC=local>;(objectClass=person);cn,mail,SAMAccountName;subtree", _
    "Provider=ADSDSOObject")
adp.Fill(ds, "Table1")

とか。
http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/sept05/hey0929.mspx


ただし .NET から扱う場合には、System.DirectoryServices 名前空間を
利用した方がよいかと思います。

Using de As New DirectoryEntry("LDAP://CN=Users,DC=ドメイン,DC=local")
    Using ds As New DirectorySearcher(de)
        ds.Filter = "(&(objectClass=person)samAccountName=アカウント名)"
        Dim ret As SearchResult = ds.FindOne()
        MsgBox(ret.GetDirectoryEntry().Properties("mail").Value)
    End Using
End Using

# LDAP:// や Filter の部分は適宜書き換えてください。

編集 削除
とも  2010-02-09 11:59:11  No: 146742  IP: 192.*.*.*

オショウさん、aetosさん、魔界の仮面弁士さんありがとうございます!
解決しました!!
いろいろやり方があるんですね。
勉強します。

今回はSystem.DirectoryServices を使って解決しました。

編集 削除