$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

  }