注意:備忘録です。
今の職場はAD管理しているので、各ユーザの情報をツール毎にいちいちテーブル作って管理するという悪しき習慣を失くすためにAD連携用のクラスを作って使いまわすことにしました。
んで調べた結果がしたのやつ。本当はログインユーザのメールアドレスを取得したかっただけなんだが序でにとれる情報は全部取ることにした。
Dim domain As String = Environment.UserDomainName ' ドメイン名
Dim uName As String = Environment.UserName ' ユーザー名
Dim path As String
'例 hoge@hogehoge アクティブディレクトリのアドレス
path = "LDAP://IP/DC=hoge,DC=hogehoge"
Dim root As New DirectoryEntry(path)
Dim schr As New DirectorySearcher(root)
schr.SearchScope = SearchScope.Subtree
schr.Filter = "(&(objectCategory=person)(sAMAccountName=" & Environment.UserName & "))"
'ここで取得したい項目を設定しとく
schr.PropertiesToLoad.Add("mail") 'メールアドレス
schr.PropertiesToLoad.Add("Title") '役職?
schr.PropertiesToLoad.Add("Department") '部門名
schr.PropertiesToLoad.Add("Company") '会社名
Dim sr As SearchResult = schr.FindOne() 'ここで取得、存在しないドメインユーザの場合NOTHINGが返ってくるので注意
Dim userEntry = sr.GetDirectoryEntry()
Debug.WriteLine(userEntry.Properties.Item("mail").Value)
Debug.WriteLine(userEntry.Properties.Item("Title").Value)
Debug.WriteLine(userEntry.Properties.Item("Department").Value)
Debug.WriteLine(userEntry.Properties.Item("Company").Value)
Debug.WriteLine(userEntry.Properties.Item("Fabrikam").Value)


コメント