Мы администратор домена domain.test крупного предприятия, и в нашей Active Directory имеются учетные записи компьютеров которые уже не используются в нашей сети. Появились они из-за
того что при замене старых компьютеров, или переустановке на них операционных
систем, системные администраторы не выводили их из домена, в некоторых случаях для
этого не было возможности, так как компьютер не удавалось элементарно запустить.
Задача:
Организовать процедуру поиска и удаления,
неиспользуемых в домене учетных записей компьютеров. Учесть то что в домен так
же введены компьютеры под управлением Mac OS Х которые не
умею работать с атрибутом LastLogonTimeStamp. Исключить подразделение, в
котором находятся учетные записи серверов. Компьютеры удалять не сразу, а
создать зону карантина в которой они будут находится некоторое время перед
удалением.
Решение этой задачи будет состоять из
двух скриптов. Первый будет осуществлять поиск и перемещение устаревших учетных
записей в специально созданную OU DisabledComputers
(карантин). Второй будет удалять эти компьютеры оттуда, когда будет полная уверенность
в том что они больше не нужны.
Скрипт №1 – Поиск и перемещение в карантин
·
#Подключаем модуль ActiveDirectory
·
Import-Module ActiveDirectory
·
·
# Берем текущую дату и отнимаем от неё необходимое количество дней. По
умолчанию пароль учетной записи компьютера в домене меняется каждые 30 дней,
поэтому задаем значение больше 30. В нашем случае это 45 дней.
·
$Date = (Get-Date).AddDays(-45).ToFileTime()
·
·
#Исключаем OU с серверами
·
$DC = Get-ADComputer -Filter "*" -SearchScope Subtree -SearchBase "OU=Servers,DC=domain,DC=test" | select -exp distinguishedName
·
·
# Отбираем компьютеры у которые подключались к домену более 45-ти дней
назад, у которых поле operatingSystem не пустое и не равно 'Mac OS X', а так же
исключаем OU с контроллерами домена.
·
$Computers = Get-ADComputer -Properties Name,LastLogonTimeStamp,operatingSystem -Filter {LastLogonTimeStamp -lt $Date -and operatingSystem -notlike 'Mac OS X'} | Where-Object {$_.operatingSystem -ne $null -and $DC -notcontains $_.DistinguishedName}
·
·
#Отключаем выбранные компьютеры
·
$Computers | Set-ADComputer -Enabled $false
·
·
#Перемещаем в подразделение для удаленных компьютеров
·
$DisabledComputersOU = "OU=DisabledComputers,DC=domain,DC=test"
·
foreach ($comp in $Computers) {Move-ADObject -Identity $comp -TargetPath $DisabledComputersOU}
Скрипт № 2 – Удаление учетных записей
·
#Подключаем модуль ActiveDirectory
·
Import-Module ActiveDirectory
·
·
#Отключаем запрос на подтверждение удаления, и вывод ошибок (а они будут,
если объект защищен от случайного удаления)
·
$ConfirmPreference = "None"
·
$ErrorActionPreference = "SilentlyContinue"
·
·
#Отбираем компьютеры из карантина, убеждаясь еще раз что они отключены
·
$DelComputers = Get-ADComputer
-Filter 'Enabled
-eq $false' -SearchScope onelevel -SearchBase
"OU=DisabledComputers,DC=domain,DC=test"
·
·
#Удаляем выбранные компьютеры по очереди
·
foreach ($DelComp in
$DelComputers) {Remove-ADComputer
-Identity $DelComp
}
Скрипты можно добавить в планировщик, либо запускать вручную. Так же можно дописать отправку уведомлений по почте о том какие компьютеры были перемещены, и какие
будут удалены. Но это уже как говорится «соль и перец по вкусу». С поставленной
в начале задачей я считаю мы справились.