Назад | Перейти на главную страницу

Поддержка Powershell для очистки Active Directory

Я только что заключил контракт на очистку системы Active Directory для большой компании. Мне сказали, что это будет довольно напряженная работа, но, просмотрев систему и увидев, насколько она неорганизована и беспорядочно, я понял, что не смогу выполнять свои обязанности в полной мере. По сути, у этой компании слишком много неактивных учетных записей, которые пока нельзя удалить. Я хочу выполнить «Scream Test» для определенных учетных записей и удалить их позже. Если бы это было всего несколько тысяч неактивных учетных записей, это была бы одна история, но, к сожалению, это довольно много тысяч (я еще не взял точное число, но оно превышает 20 000). Мне было любопытно, знает ли кто-нибудь способ сортировки этой информации в автоматическом режиме, кроме использования Hyena для получения отчетов, а затем их просмотра один за другим.

Я предполагаю, что ваш вопрос заключается в поиске неактивных учетных записей.

Я использую JoeWare's Oldcmp инструмент. http://www.joeware.net/freetools/tools/oldcmp/index.htm все еще спустя столько лет.

Он может находить неактивные учетные записи AD, глядя на возраст пароля и, в частности, LLTS = lastLogonTimestamp

Это достаточно просто, чтобы по крайней мере начать работу, и проще, чем Powershell. Затем отключите эти учетные записи и используйте ADUC для создания настраиваемого окна запроса для отключенных учетных записей. Таким образом, вам не нужно перемещать ничего, что может потребоваться повторно включить позже.

НО ... Я согласен с Hopeless и Mfinni, и сказал бы, что вам лучше четко изложить, что вы планируете делать с менеджментом, ПРЕЖДЕ чем что-либо реализовывать.

Для этого я использую Powershell, вызывая lastlogondate собственность.

Здесь я возвращаю все samaccountname которые имеют дату последнего входа более 30 дней (с сегодняшнего дня):

$datenow = Get-date
$treshold=$datenow.AddDays(-30)
$users=Get-ADuser -Filter * -properties samaccountname,lastlogondate
foreach($user in $users) {
  $lastlogon = $user.lastlogondate
  if($lastlogon -lt $treshold) { 
    echo $user.samaccountname
    echo $user.lastlogondate
    echo "------------------------------------------------"
  }
}

Отсюда вы можете:

  • Настройте порог даты в соответствии с вашими потребностями
  • Отключить учетную запись AD (Отключить-ADAccount)
  • Все, что вы хотите (по крайней мере, большинство вещей)

Хороший совет выше: управление изменениями и документирование разрешений. Я бы попробовал такой подход

Создайте инвентарь учетной записи, который включает такие атрибуты, как lastLogonTimestamp, pwdLastSet, whencreated и whenchanged. Вы можете получить все это с помощью Powershell и get-ADUser. Я уверен, что в Интернете существует множество сценариев - репозиторий сценариев TechNet - хорошее место для начала.

Используйте инвентарь, чтобы найти целевые учетные записи.

Прежде чем вносить изменения в AD, рассмотрите возможность тестирования всего в тестовой среде. В репозитории есть несколько скриптов, которые позволят вам сделать копию AD (OUs, Users & groups) в вашей тестовой среде.

Несколько лет назад я выполнил аналогичную задачу, но в гораздо меньшем масштабе, чем вы сейчас. Первое, что мы сделали, - это внедрили продукт ManageEngine AD Audit, чтобы контролировать учетные записи. Вероятно, мы позволим этому поработать несколько недель, чтобы сгенерировать показатели, прежде чем делать что-либо еще. Оттуда мы смогли отследить, откуда поступали входы в учетную запись, и иметь возможность управлять ими контролируемым образом.

AD Audit - это довольно недорогой продукт, и отчеты в Excel довольно хороши, поэтому мы были очень довольны своим решением пойти с ним.

Вот несколько решений ниже. Не уверен, что это то, что вы ищете.

Пример №1: Это будет искать OU Пользователи в домене domain.local используя указанную дату. Вы можете изменить их ниже и вывести Имя пользователя и LastLogonTimestamp лайк:

Пользователь1

13.02.2014

Пользователь2

12.12.2013

Import-Module Active Directory
$lastdate = "09 April 2014 23:59:59"
$users = Get-ADUser -Filter * -SearchBase "ou=users,dc=domain,dc=local" -ResultPageSize 0 -Prop CN,lastLogonTimestamp | Select     CN,@{N='lastlogontimestamp'; E={[DateTime]::FromFileTime($_.lastlogontimestamp)}}
foreach ($user in $users) {
if ($user.lastlogontimestamp -lt $lastdate) {
echo $user.CN
echo $user.lastlogontimestamp.tostring('d/M/yyyy')
}
}

Пример №2: Это будет искать OU Пользователи в домене domain.local. Затем экспортируйте его в CSV, и вы увидите свои данные немного лучше.

Import-Module ActiveDirectory
Get-ADUser -Filter * -SearchBase "ou=users,dc=domain,dc=local" -ResultPageSize 0 -Prop CN,lastLogonTimestamp | Select    CN,@{N='lastLogonTimestamp'; E={[DateTime]::FromFileTime($_.lastLogonTimestamp)}} | Export- CSV -NoType .\last.csv

В примере 2 вы можете составить список пользователей, которых вы собираетесь удалить / отключить в CSV / Excel, и перейти с ними в Управление.

Надеюсь это поможет!

Как многие другие упоминали, ТЕСТ перед внесением каких-либо изменений, особенно при написании сценариев или внесении производственных изменений в AD.

Я бы посмотрел на бесплатный модуль Active Directory (на самом деле это оснастка) из Квест

Командлет Quest Get-QADUser включает различные параметры, связанные с неактивностью аккаунта, такие как -Inactive,-InactiveFor,-ExpiredFor,-NotLoggedOnFor и -PasswordNotChangedFor которые позволяют легко сообщать о неактивных учетных записях на основе значений этих параметров. Предлагаю скачать модуль и использовать Get-Help Get-QADUser -Full | more или если у вас установлена ​​ISE, я предпочитаю Get-Help Get-QADUser -Show чтобы увидеть все подробности в отдельном окне.

Примером может быть:

Get-QADUser -ExpiredFor 30 -NotLoggedOnFor 30 -PasswordNotChangedFor 90 | Select-Object Name,SamAccountName,PasswordLastSet,PasswordIsExpired,LastLogonTimestamp,AccountIsExpired | Sort-Object Name | Export-CSV C:\InactiveADUsers.csv -NoTypeInformation -Force

Вы можете получить очень похожий результат, используя собственный модуль AD с немного большей смазкой для локтей.