2012-02-23 7 views
2

"sAMAAccountName"フィールドを知っている特定のユーザーを取得する必要があります。Active Directory(AD)のOUを知らなくても、特定のユーザーが特定の属性を取得できますか?

事は、この特定のユーザは、多くのグループの内側にすることができている:

OU=ThirdParty 
    OU=Company1 
     CN=User1 
     CN=User2 
     CN=User3 
    OU=Company2 
     CN=User1 
     CN=User2 
     CN=User3 

自分のグループを知らないユーザーを取得する方法は、彼らだけが持っている一つの属性を使用して、ありますか?

マイコード:

DirectorySearcher search = new DirectorySearcher(_path); 
search.Filter = "(&(objectCategory=person)(objectClass=User))"; 
StringBuilder groupNames = new StringBuilder(); 
try 
{ 
    SearchResultCollection result = search.FindAll(); 
    ..... 
} 

ありがとう!

EDIT:

[OK]を、私はそれがこのコードを使用してしまった:

DirectorySearcher search = new DirectorySearcher(_entry, "(sAMAccountName=" + userCode + ")"); 
+0

Anthony Shawのリンクでは、私が望むのと同じ事をexatclyしている例があります!ありがとう! – Otuyh

答えて

1

どのような情報は、ユーザーについて知る必要がありますか?この記事はあなたにそれ以上とinsiteを提供する場合、我々はあなたのコメントの後に、ユーザー

using (var identity = new WindowsIdentity(username)) 
{ 
    var user = new WindowsPrincipal(identity); 

    if (user.IsInRole("Some Role Name")) 
     return true; 

    return false; 
} 

EDIT についての情報を取得するために、過去にこの種のコードを使用している、私は疑問に思います。 InfoPathを参照しているので、従業員を取得するコードがあなたに当てはまるとは思えません。http://msdn.microsoft.com/en-us/library/bb952744(v=office.12).aspx

+0

まあ、私は "physicalDeliveryOfficeName"フィールドを知る必要があります、これが関連しているかどうかは分かりません。私はURコードをしよう!ありがとう! – Otuyh

+0

は、 'physicalDeliveryOfficeName'をつかんでいるように見えるinfopathに関するmsdn記事へのリンクを追加しました。あなたにもそれを見せるかもしれません –

+1

ありがとう!このリンクには答えがあります! – Otuyh

1

System.DirectoryServices.AccountManagementに切り替えると、 APIは事実ははるかに簡単です。例えば

は:

public something FindUserByUserName(string UserName) 
    { 
     using (var searcher = 
      new PrincipalSearcher(new UserPrincipal(ConfigurationContext) { Name = UserName })) 
     { 
      var item = searcher.FindOne(); 

      // do whatever you want with the found object and return it 
     } 
    } 

ConfigurationContextPrincipalContext返すプロパティです(資格情報は、ADに接続するには、 "接続文字列" のようなもの)

0

はこれを試してみてください:

public static List<string> GetADUserInfo(string login) 
{ 
    //Using Hosting.HostingEnvironment.Impersonate() 
    List<string> info = new List<string>(); 
    PrincipalContext infPC = new PrincipalContext(ContextType.Domain, "domain", "login", "password"); 
    UserPrincipal infUP = new UserPrincipal(infPC); 
    PrincipalSearcher infPS = new PrincipalSearcher(); 
    UserPrincipal foundUP; 

    infUP.SamAccountName = login; 
    infPS.QueryFilter = infUP; 
    foundUP = infPS.FindOne(); 

    if (foundUP != null) { 
     info.Add(foundUP.SamAccountName.ToLower); 
     info.Add(foundUP.GivenName); 
     info.Add(foundUP.Surname); 
     info.Add(foundUP.EmailAddress.ToLower); 
     return info; 
    } 

    return null; 
} 
関連する問題