Я только что заключил контракт на очистку системы 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 "------------------------------------------------"
}
}
Отсюда вы можете:
Хороший совет выше: управление изменениями и документирование разрешений. Я бы попробовал такой подход
Создайте инвентарь учетной записи, который включает такие атрибуты, как 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 с немного большей смазкой для локтей.