Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Active Directory DirectorySearcher未返回所有可用属性_C#_Active Directory - Fatal编程技术网

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

C# Active Directory DirectorySearcher未返回所有可用属性,c#,active-directory,C#,Active Directory,我正在为我的老板编写一个新的程序,它将取代他们目前使用的旧VBS 因此,这个程序应该进入广告,收集所有员工的姓名和他们的电子邮件地址。我的问题是,每个用户都有大约60个属性分配给他们,但我的程序只拉入32个字段,其中一个是CN,这是我需要的一半。当然,邮件不是要导入的属性之一。我还注意到,在调试过程中,我认为这只是从长岛分公司引进的员工,而不是从任何地方引进的员工,我不明白为什么。任何帮助都将不胜感激=D using System; using System.IO; using System.C

我正在为我的老板编写一个新的程序,它将取代他们目前使用的旧VBS

因此,这个程序应该进入广告,收集所有员工的姓名和他们的电子邮件地址。我的问题是,每个用户都有大约60个属性分配给他们,但我的程序只拉入32个字段,其中一个是CN,这是我需要的一半。当然,邮件不是要导入的属性之一。我还注意到,在调试过程中,我认为这只是从长岛分公司引进的员工,而不是从任何地方引进的员工,我不明白为什么。任何帮助都将不胜感激=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();
        }
    }
}

您可以使用
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;
    }
}
如果您还没有-请阅读MSDN文章,这篇文章很好地展示了如何最好地利用
System.DirectoryServices.AccountManagement
中的新功能。或者查看名称空间

当然,根据您的需要,您可能希望在您创建的“示例查询”用户主体上指定其他属性:

  • DisplayName
    (通常为:名字+空格+姓氏)
  • SAM帐户名
    -您的Windows/AD帐户名
  • 用户主体名称
    -您的”username@yourcompany.com“样式名

您可以在
UserPrincipal
上指定任何属性,并将其用作
PrincipalSearcher
的“示例查询”

首先,我想说我爱您!我到处都在搜索,在论坛上,youtube上,什么都没有。这成功了!获取电子邮件地址和姓名。非常感谢。最后一个问题是,我如何过滤它,使其只包含用户。当我添加if语句时,我得到了错误,if语句是否是过滤器?@user1873179:通过指定
UserPrincipal
类作为您的“搜索参数”(
qbeUser
),您告诉S.DS.AM只搜索用户。是否有方法获取具有电子邮件地址的帐户。我看到的是姓名,没有电子邮件地址。我只想让有电子邮件地址的用户显示。想好了,你只需要在if statame中放入你想过滤的内容,即foundUser.EmailAddress!=null@user1873179:完全正确-这就是为什么它被称为示例查询-您只需提供一个示例(或模板)来说明您正在寻找的内容。。。