$titles = ("Руководитель отдела","Руководитель управления","Руководитель сектора","Руководитель департамента")
# Рекурсивный поиск руководителя
function setmanager(){
param(
[string]$curdn = $null
)
write-host "Поиск в $curdn"
# Поиск в тукещем OU
$newman = get-aduser -filter * -searchbase "$curdn" -SearchScope OneLevel -property title,manager,canonicalname | ?{$titles -contains $_.title}
$cnt = ($newman | measure).count
write-host $cnt $curdn
# Если такой руководитель единственный
if ($cnt -eq 1){
# Если он не совпадает с текущим и сам не руководитель
if ($newman.name -ne $curman -and $newman.name -ne $_.name){
write-host "Найден руководитель" $newman.name -foregroundcolor yellow
return $newman
}
elseif ($newman.name -eq $_.name){
write-host "Руководитель сам себе руководителем быть не может, ищем далее по структуре"-foregroundcolor magenta
$dn = $curdn -replace '^OU=[\w\s\-\d\(\)]*,(.*)$','$1'
setmanager($dn)
}
elseif($newman.name -eq $curman){
write-host "Руководитель корректен"-foregroundcolor blue
return "Ok"
}
}
if ($cnt -gt 1){
write-host "Найдено несколько руководителей" $newman.name -foregroundcolor white
}
if (($cnt -eq 0) -and ($curdn -ne "DC=contoso,DC=com")) {
$dn = $curdn -replace '^OU=[\w\s\-\d\(\)]*,(.*)$','$1'
setmanager($dn)
}
return $null
}
Get-ADUser -Filter * -SearchBase "OU=users,DC=contoso,DC=com" -Property title,manager,canonicalname | ?{$_.manager -like "*"} | %{
write-host "обрабатываем" $_.name "в расположении" $_.canonicalname -foregroundcolor green
$curdn = $_.DistinguishedName -replace '^CN=[\w\s\-\d\(\)]*,(.*)$','$1'
$curman = (get-aduser $_.manager).name
$newman = setmanager($curdn)
if ($newman -ne $null){
if ($newman -eq "Ok"){
}
else {
write-host $_.name "внесены изменения:" $curman "->" $newman.name
set-aduser $_ -manager $newman.DistinguishedName
}
}
else {
write-host "Руководитель не найден" -foregroundcolor red
}
}