Как-то я публиковал статью Powershell – автоматизируем построение организационной структуры в Active Directory. Очень удобно, когда можно для любого пользователя видеть его руководителя и подчиненных. Видеть это можно в Outlook, Sharepoint и Lync. А еще можно использовать визард в Visio, с помощью которого автоматически построить графическое отображение организационной структуры, и опубликовать его на сайте Sharepoint!
Недавно столкнулся с более сложной ситуацией: несколько филиалов и несколько доменов, GAL синхронизируется с помощью FIM (т.е. кроме учетных записей пользователей надо обрабатывать контакты), организационная структура включает в себя филиалы, имена которых внесены в атрибут Company учетных записей, сотрудники одного филиала могут подчиняться руководителю другого филиала.
Ниже приведен скрипт, который автоматизирует построение нижнего уровня организационной иерархии, а именно делает привязку подчиненных начальникам отделов. В моем случае более верхние уровни оказались плохо формализуемыми, поэтому в скрипте их нет, и вы можете сделать доработки сами под свою ситуацию при необходимости.
# # Заполнение полей Manager для учетных записей сотрудников # Непосредственный начальник определяется по имени филиал+подразделение и списку должностей начальников # $SearchBase = "OU=GALContacts,DC=domain,DC=ru" $adusers = Get-ADObject -LDAPFilter "(&(&(&(objectCategory=user)(objectClass=user)(department=*)(!userAccountControl:1.2.840.113556.1.4.803:=2)) ))" ` -Properties department,manager,title,Company # # Кроме пользователей нам нужны контакты GAL # $adcontacts = Get-ADObject -LDAPFilter "(&(&(&(objectCategory=contact)(objectClass=contact)(department=*)) ))" ` -Properties department,manager,title,Company -SearchBase $SearchBase $adusers += $adcontacts $bossTitleList = @("Нач. цеха","Глав.бух.","Начальник отдела", "Начальник службы", "Начальник центра") # # Для каждого подразделения составляем список его сотрудников # $deps = @{} $adusers | % { $deps[$_.Company + $_.Department] += @($_) } # # Для каждого подразделения находим его начальника # $depboss = @{} foreach ( $dep in $deps.keys ) { $deps[$dep] | ? {$bossTitleList -contains $_.title} | % {$depboss[$dep] = $_ } } # # Для каждого начальника берем его подразделение и каждому сотруднику заполняем поле Manager # foreach ( $dep in $depboss.keys ) { $boss = $depboss[$dep] $deps[$dep] | ? {$_ -ne $boss} | ? {$_.manager -ne $boss.DistinguishedName} | % { Set-ADObject -Identity $_ -Replace @{manager=$boss.DistinguishedName} } }
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, «Courier New», courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
Filed under: Active Directory, Powershell | Tagged: Active Directory, exchange server, Powershell | Leave a comment »