четверг, 7 февраля 2019 г.

Лентяй №1 или как заставить компьютеры в домене находиться в правильной OU

Задача:
При добавлении компьютера в домен пользователем с соответствующими правами, необходимо перемещать компьютер в нужную OU.
Отступление: перемещение удобно для нарезания правильных политик, да и сортировать по департаментам весьма удобней, нежели все компютеры в одной папке. Действия производим на контроллере домена. Структура:
DC=CONSTOTO,DC=COM
OU=Departments,DC=CONSTOTO,DC=COM
OU=SomeDepartment,OU=Departments,DC=CONSTOTO,DC=COM
OU=Computers, OU=SomeDepartment,OU=Departments,DC=CONSTOTO,DC=COM
OU=Groups, OU=SomeDepartment,OU=Departments,DC=CONSTOTO,DC=COM
OU=Users, OU=SomeDepartment,OU=Departments,DC=CONSTOTO,DC=COM

И так, приступим. План действий:
  1. Пользователь (адммин участка/отдела) сам может (и должен) ввести компьютер (сервер) в домен.
  2. В любом объекте типа компьютер есть акой парметр, как ms-ds-creatorsid, его мы и будем использовать для автоматизации.
  3. Пишем скрипт.
  4. Добавляем скрипт в планировщик заданий.
$Clients = Get-ADComputer -SearchBase "CN=Computers,DC=constoto,DC=com" -Properties ms-ds-CreatorSid, WhenCreated -Filter {ms-ds-creatorsid -ne "$Null"}
$Users = Get-ADUser -Filter * -SearchBase "OU=Departments,DC=constoto,DC=com"
ForEach ($C in $Clients) {
    ForEach ($U in $Users) {
        If ($U.Sid -eq $C.'ms-ds-creatorsid') {
            $Target = $U.distinguishedName -replace 'CN=.*,OU=Users',"OU=Computers"
            $Source = $C.objectGUID
            Write-Host (Get-Date -Format g) "- Object '$Source' going to '$Target'"
            Move-ADObject -Identity $Source -TargetPath $Target
        }
    }
}
Планировщик:
  1. создал простое задание начало в 7 утра, повторять каждые 5 минут, запускать независимо залогинен пользователь или нет
  2. программа/скрипт PowerShell.exe, аргуманты: -ExecutionPolicy Bypass C:\kostyli\CompToOU.ps1
  3. юзер с правами на всю эту красоту (админ, как например)
Теперь осталось заставить админов департаментов делать своё чёрное дело.