C# 如何在广告中找到属于某个组的用户,并只获取他们的SAMAccountName和SID?

C# 如何在广告中找到属于某个组的用户,并只获取他们的SAMAccountName和SID?,c#,active-directory,C#,Active Directory,我只希望用户能够在文本框中键入组名,并只返回他们的登录名和SID 到目前为止,我已经有了这个,并且加载了组中的用户,但是我不确定如何提取登录名和SID SearchResult result; DirectorySearcher search = new DirectorySearcher(); search.Filter = String.Format("(cn={0})", txtGroup.Text); search

我只希望用户能够在文本框中键入组名,并只返回他们的登录名和SID

到目前为止,我已经有了这个,并且加载了组中的用户,但是我不确定如何提取登录名和SID

 SearchResult result;
            DirectorySearcher search = new DirectorySearcher();
            search.Filter = String.Format("(cn={0})", txtGroup.Text);
            search.PropertiesToLoad.Add("member");
            search.PropertiesToLoad.Add("cn");
            search.PropertiesToLoad.Add("objectGUID");
            result = search.FindOne();


            StringBuilder userNames = new StringBuilder();
            if (result != null)
            {
                for (int counter = 0; counter <
                result.Properties["member"].Count; counter++)
                {
                    string user = (string)result.Properties["member"][counter];
                    userNames.AppendLine(user);

                }
            }
            lblResults.Text = userNames.ToString();
搜索结果;
DirectorySearcher search=新建DirectorySearcher();
search.Filter=String.Format(“(cn={0})”,txtGroup.Text);
search.PropertiesToLoad.Add(“成员”);
search.PropertiesToLoad.Add(“cn”);
search.PropertiesToLoad.Add(“objectGUID”);
结果=search.FindOne();
StringBuilder用户名=新的StringBuilder();
如果(结果!=null)
{
对于(int计数器=0;计数器<
result.Properties[“member”].Count;计数器++)
{
字符串用户=(字符串)结果。属性[“成员”][计数器];
userNames.AppendLine(用户);
}
}
lblResults.Text=用户名.ToString();

我认为如果您撤销查询,效果会更好:

(&(objectClass=user)(memberOf={0}))

这样,您可以使用
FindAll
直接获取用户列表。不要忘记将
sAMAccountName
等添加到
PropertiesToLoad
中,包含SID的属性称为
objectSid
,对于NT4兼容版本和
userPrincipalName
,包含登录名的属性为
sAMAccountName
。你最好使用@Virkkunen建议

static void Main(string[] args)
{
  /* Connection to Active Directory
   */
  DirectoryEntry deBase = new DirectoryEntry("LDAP://192.168.183.138:389/dc=societe,dc=fr", "administrateur", "pwd");

  /* Directory Search
   */
  DirectorySearcher dsLookForGrp = new DirectorySearcher(deBase);
  dsLookForGrp.Filter = String.Format("(cn={0})", "yourgroup");
  dsLookForGrp.SearchScope = SearchScope.Subtree;
  dsLookForGrp.PropertiesToLoad.Add("distinguishedName");
  SearchResult srcGrp = dsLookForGrp.FindOne();

  /* Directory Search
   */
  DirectorySearcher dsLookForUsers = new DirectorySearcher(deBase);
  dsLookForUsers.Filter = String.Format("(&(objectCategory=person)(memberOf={0}))", srcGrp.Properties["distinguishedName"][0]);
  dsLookForUsers.SearchScope = SearchScope.Subtree;
  dsLookForUsers.PropertiesToLoad.Add("objectSid");
  dsLookForUsers.PropertiesToLoad.Add("userPrincipalName  ");
  dsLookForUsers.PropertiesToLoad.Add("sAMAccountName");
  SearchResultCollection srcLstUsers = dsLookForUsers.FindAll();

  foreach (SearchResult sruser in srcLstUsers)
  {
    Console.WriteLine("{0}", sruser.Path);

    SecurityIdentifier sid = new SecurityIdentifier((byte[])   sruser.Properties["objectSid"][0], 0);
    Console.WriteLine(sid.ToString());    

    foreach (string property in sruser.Properties.PropertyNames)
    {
      Console.WriteLine("\t{0} : {1} ", property, sruser.Properties[property][0]);
    }
  }
}