简体   繁体   English

Active Directory DirectorySearcher未返回所有可用属性

[英]Active Directory DirectorySearcher is not returning all of the available properties

I am writting a new progam for my boss that will replace this old VBS that they are currently using. 我正在为我的老板写一个新的程序,它将取代他们目前正在使用的旧VBS。

So the program is suppose to go into the AD and collect the Name of all the employees and their email addresses. 所以该程序假设进入AD并收集所有员工的姓名及其电子邮件地址。 My problem is that each user has around 60ish properties assigned to them but my program is only pulling in 32 fields, one of which is the CN which is half of what I need. 我的问题是每个用户都有大约60个属性分配给他们,但我的程序只有32个字段,其中一个是CN,这是我需要的一半。 Of course mail is not one of the properties being imported. 当然邮件不是导入的属性之一。 I have also noticed while debugging that I think is is only bring in the emlpoyees from the Long Island branches and not from everywhere which I dont understand why. 我也注意到调试时我认为只是从长岛分支机构带来的emlpoyees,而不是来自我不明白为什么的所有地方。 Any help would be greatly appreciated!! 任何帮助将不胜感激!! =D = d

using System;
using System.IO;
using System.Collections.Generic;
using System.Text;
using System.DirectoryServices;
using Microsoft.Office.Interop.Excel;
using System.DirectoryServices.ActiveDirectory; 


namespace EmailListing
{
    class Program
    {
        static void Main(string[] args)
        {


            DirectoryEntry adFolderObject = new DirectoryEntry("LDAP://OU=PHF Users,DC=phf,DC=inc");


            DirectorySearcher adSearchObject = new DirectorySearcher(adFolderObject);
            adSearchObject.SearchScope = SearchScope.Subtree;



            adSearchObject.Filter = "(&(ObjectClass=user)(!description=Built-in*))";




            foreach (SearchResult adObject in adSearchObject.FindAll())
             {
                 //mail = adObject.Properties["mail"].ToString();

                Console.Write(adObject.Properties["cn"][0]); 
                Console.Write(".        ");
                //Console.WriteLine(mail);





             }

            Console.WriteLine();
            Console.ReadLine();
        }
    }
}

You can use a PrincipalSearcher and a "query-by-example" principal to do your searching: 您可以使用PrincipalSearcher和“按示例查询”主体进行搜索:

// create your domain context
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);

// define a "query-by-example" principal - here, we search for a UserPrincipal 
UserPrincipal qbeUser = new UserPrincipal(ctx);

// create your principal searcher passing in the QBE principal    
PrincipalSearcher srch = new PrincipalSearcher(qbeUser);

// find all matches
foreach(var found in srch.FindAll())
{
    // do whatever here - "found" is of type "Principal" - it could be user, group, computer.....          
    UserPrincipal foundUser = found as UserPrincipal;

    if (foundUser != null && !foundUser.Description.StartsWith("Built-In"))
    {
        string firstName = foundUser.GivenName;
        string lastName = foundUser.Surname;
        string email = foundUser.EmailAddress;
    }
}

If you haven't already - absolutely read the MSDN article Managing Directory Security Principals in the .NET Framework 3.5 which shows nicely how to make the best use of the new features in System.DirectoryServices.AccountManagement . 如果您还没有 - 绝对阅读MSDN文章.NET Framework 3.5中的管理目录安全主体,它很好地展示了如何充分利用System.DirectoryServices.AccountManagement中的新功能。 Or see the MSDN documentation on the System.DirectoryServices.AccountManagement namespace. 或者,请参阅System.DirectoryServices.AccountManagement命名空间MSDN文档

Of course, depending on your need, you might want to specify other properties on that "query-by-example" user principal you create: 当然,根据您的需要,您可能希望在您创建的“按示例查询”用户主体上指定其他属性:

  • DisplayName (typically: first name + space + last name) DisplayName (通常为:名字+空格+姓氏)
  • SAM Account Name - your Windows/AD account name SAM Account Name - 您的Windows / AD帐户名称
  • User Principal Name - your "username@yourcompany.com" style name User Principal Name - 您的“username@yourcompany.com”样式名称

You can specify any of the properties on the UserPrincipal and use those as "query-by-example" for your PrincipalSearcher . 您可以在UserPrincipal上指定任何属性,并将这些属性用作PrincipalSearcher “按示例查询”。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM