ADに設定されているメールアドレスの情報を取得しようと四苦八苦しています。
以下のようにしてユーザーは取得できるのですが、IADsUser にあるメールアドレスの内容を表示されません。
使い方が間違っているのでしょうか?
ActiveDs.IADsUser = GetObject("WinNT://ドメイン/ユーザID,user")
多分、これじゃ〜ないかな?
http://garfie.weblogs.jp/life_of_dev/2008/12/activedirecto-1.html
以上。
> IADsUser にあるメールアドレスの内容を表示されません。
とはどういう状態?
IADsUser::get_EmailAddress では取得できませんか?
間違えた…ここ VB 掲示板だった。
先の投稿は忘れてください。
> 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 の部分は適宜書き換えてください。
オショウさん、aetosさん、魔界の仮面弁士さんありがとうございます!
解決しました!!
いろいろやり方があるんですね。
勉強します。
今回はSystem.DirectoryServices を使って解決しました。