Las*_*PEW 7 c# active-directory
我正在为我的老板写一个新的程序,它将取代他们目前正在使用的旧VBS.
所以该程序假设进入AD并收集所有员工的姓名及其电子邮件地址.我的问题是每个用户都有大约60个属性分配给他们,但我的程序只有32个字段,其中一个是CN,这是我需要的一半.当然邮件不是导入的属性之一.我也注意到调试时我认为只是从长岛分支机构带来的emlpoyees,而不是来自我不明白为什么的所有地方.任何帮助将不胜感激!!= 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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用 aPrincipalSearcher和“按示例查询”主体来进行搜索:
// 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;
}
}
Run Code Online (Sandbox Code Playgroud)
如果您还没有阅读过 MSDN 文章《在 .NET Framework 3.5 中管理目录安全主体》,该文章很好地展示了如何充分利用 .NET Framework 中的新功能System.DirectoryServices.AccountManagement。或者参阅有关 System.DirectoryServices.AccountManagement 的 MSDN 文档命名空间的 MSDN 文档。
当然,根据您的需要,您可能希望在您创建的“按示例查询”用户主体上指定其他属性:
DisplayName(通常:名字 + 空格 + 姓氏)SAM Account Name- 您的 Windows/AD 帐户名User Principal Name- 您的“username@yourcompany.com”风格名称您可以指定 上的任何属性,UserPrincipal并将它们用作PrincipalSearcher.