Чистим Active Directory от "мёртвых душ"

24.07.2014 - 20:35

Привет!
Сменил место работы и пришёл после нескольких "админов". Благодаря действиям моим теперешних коллег, ситуация не настолько печальна, как могла бы быть.
Необходимо убрать несуществующих пользователей и ПК, деактивировать и перенести в карантин.

ПК, отсеять всех, которые включены и не логинились больше 90 дней. В переменной $d можно указать любое количество дней:

$d = [DateTime]::Today.AddDays(-90)
Get-ADComputer -filter {(enabled -eq "true") -and (lastlogondate -le $d)} -properties cn,lastlogondate

Автоматическое отключение и перенос специально не автоматизировал, потому что это операция, которая проводится не чаще 1 раза в месяц. Мало того, необходимо вручную пересмотреть все объекты, чтобы убедиться, что этот объект действительно ненужный. Но, никто не мешает дописать в строке:
Get-ADComputer -filter {(enabled -eq "true") -and (lastlogondate -le $d)} -properties cn,lastlogondate | Set-ADComputer -Enabled:$false

Пользователи, которые включены и не логинились более 90 дней. Также, как и в предыдущем скрипте, можно указывать любое количество дней. Также, не воспринимаются служебные "пользователи" почтовой системы Exchange, а также, пользователи общих папок и доступа к почте:

$d = [DateTime]::Today.AddDays(-90)
$ExchangeOU = "OU=Exchange,OU=Groups,OU=City,DC=Organization,DC=local"
$OldUsers = Get-ADUser -filter {(enabled -eq "true") -and (lastlogondate -le $d)} -properties cn,lastlogondate

foreach ($user in $OldUsers)
{
    if (!($User.distinguishedName).contains($ExchangeOU))
    { $User.UserPrincipalName + " : " + $User.distinguishedName + " : " + $User.LastLogonDate }
}

Найти пользователей, которые отключены, но не находятся в OU для отключённых пользователей:

$InactiveUserOU = 'OU=InactiveUsers,OU=Users,OU=City,DC=Organization,DC=local'
$DiasabledUsers = Get-ADUser -Filter {(enabled -eq "false")}

foreach ($user in $DiasabledUsers)
{
    #$User.DistinguishedName
    if (!($User.distinguishedName).contains($InactiveUserOU))
    { $User.UserPrincipalName + " : " + $User.distinguishedName + " : " + $User.LastLogonDate}
}

Тут можно было бы и перенести пользователей, но, опять, есть служебные пользователи, которых перемещать нельзя, но они постоянно находятся в выкл. состоянии.

Как проверить, есть ли объекты (компьютеры) в Active Directory с одинаковыми SID-ами? Повторяющиеся SID-ы - настоящая проблема, её не видно, но при каждом шаге настройки или установки возникают всё новые и новые ошибки. Зачастую, повторяющиеся SID-ы возникают после разворачивания виртуальной машины на гипервизоре, шаблон которой был неправильно создан.

$Comps = Get-ADComputer -Filter * -Properties sid | select name,enabled,sid
for ($i=0; $i -le $Comps.count;$i++)
{
    if ($Comps[$i] -eq $Comps[$i-1])
    {
        $Comps[$i]
    }
}

Также, очень советую почитать блог с примерами замечательного человека: Mike Griffin Home Blog
закрытие ФОП

Ваша оценка: Нет Средняя: 2.8 (5 votes)

Комментарии:


Забыл указать в самом начале статьи, что при выполнении данных скриптов в консоли PowerShell на контроллере домена, необходимо консоль запускать от имени администратора и подгрузить модуль ActiveDirectory:

Import-Module ActiveDirectory