2010-09-15 8 views
0

Моя компания - магазин Microsoft (Exchange, AD и т. Д.).Программный запрос к каталогу сотрудников моей компании

Я хотел бы сделать запросы на наш каталог сотрудников, как:

Person person = directory.Lookup("jsmith"); 
string title = person.Fields("JobTitle"); 
Person manager = person.GetManager(); 
if (person.IsManager()) 
{ 
    Person[] subordinates = person.GetSubordinates(); 
} 

Есть ли простой способ сделать что-то вроде этого? Я намерен сделать это на неофициальной основе в сценариях, а не в судоходном коде.

+1

Протектор тщательно, как и админы могут обратить внимание, что вы неформально org- намечая вашего работодателя. Это может вызвать бровь, если не сказать больше, даже если вы делаете это в своих обычных разрешениях на учет и даже если эта информация доступна вам в более удобном графическом интерфейсе (например, Outlook). Я бы не сделал этого, если у вас не было * необходимости * для информации. –

+1

Есть несколько способов взглянуть на это. Если вы не влияете на работу AD или WAN/LAN, действительно не должно быть большой причины для ухода SysAdmin. В зависимости от офисной политики они могли кричать что-то страшное и жаловаться, или вы могли бы просто сказать им, что я разработчик freakin, и это моя работа, чтобы писать эти запросы/скрипты. –

+0

Да, я действительно не думал, что это будет проблема с производительностью. Схемы Org и/или справочники сотрудников являются ценными для конкурентов и рекрутеров - некоторые крупные компании не будут легко смотреть на такую ​​деятельность. Во всяком случае, я не буду рисковать своей работой над этим. –

ответ

2

Я никогда не использовал это, но это выглядит интересно:

Linq to Active Directory

Подари пример:

var users = new DirectorySource<User>(ROOT, SearchScope.Subtree); 
users.Log = Console.Out; 

var res = from usr in users 
      where usr.FirstName.StartsWith("B") && usr.Office == "2525" 
      select new { Name = usr.FirstName + " " + usr.LastName, usr.Office, usr.LogonCount }; 

foreach (var u in res) 
{ 
    Console.WriteLine(u); 
    u.Office = "5252"; 
    u.SetPassword(pwd); 
} 

users.Update();