Поиск неактивных и отключенных компьютеров/пользователей в Active Directory с помощью PowerShell
Довольной частой задачей, которую приходится выполнять администратору Active Directory, является формирование списка неактивных или отключенных учетных записей пользователей и/или компьютеров. Для получения списка неактивных объектов в домене Active Directory можно использовать как сохраненные LDAP запросы в консоли ADUC, так и командлеты PowerShell. В этой статье мы покажем, как использовать PowerShell для поиска неактивных учетных записей пользователей или компьютеров.
Администратору Active Directory нужно периодически отключить и удалять неиспользуемые компьютеры и учетные записи пользователей. Это позволит уменьшить размер базы данных AD (файла ntds.di), а также снизит риски использования старых аккаунтов для доступа к домену злоумышленником или бывшими сотрудниками.
Для использование всех командлетов PowerShell, рассмотренных ниже, на компьютере должны быть установлены как минимум версия PowerShell 3.0 и набор Remote Server Administration Toolkit (RSAT), в котором должен быть включен компонент Active Directory Module for Windows PowerShell (Control Panel -> Programs-> Turn Windows Features on and off-> Remote Server Administration Tools -> Role Administration Tools -> AD DS and AD LDS Tools).
Модуль AD PowerShell также может быть включен командой:
Add-WindowsFeature RSAT-AD-PowerShell
Запустите консоль PowerShell и импортируйте модуль Active Directory в сессию:
Import-Module ActiveDirectory
Поиск старых (неактивных) компьютеров в домене
Для поиска неактивных компьютеров в домене можно использовать командлет Get-ADComputer. В качестве критерия поиска можно использовать атрибут LastLogonTimeStamp. Обратите внимание, что этот атрибут нельзя использовать для получения информации о времени последнего входа компьютера в домен в реальном времени. Однако благодаря тому, что этот атрибут реплицируется между DC раз в 9-14 дней, вы можете получить информацию о последнем входе компьютера в домен с любого контроллера домена (в отличии от атрибута LastLogonDate, который обновляется только на DC, через который выполнил вход компьютер).
Текущее значение атрибута LastLogonTimeStamp можно получить в свойствах компьютера в консоли ADUC на вкладке редактора атрибутов.
Чтобы найти в определенном OU все компьютеры, которые не использовались для входа в сеть более 180 дней, воспользуйтесь следующими командами:
$LastLogonDate= (Get-Date).AddDays(-180)
Get-ADComputer -Properties LastLogonTimeStamp -Filter {LastLogonTimeStamp -lt $LastLogonDate } -SearchBase ‘OU=Computers,OU=MSK, dc=winitpro,dc=ru’| Sort LastLogonTimeStamp| FT Name, @{N='lastlogontimestamp'; E={[DateTime]::FromFileTime($_.lastlogontimestamp)}} -AutoSize | Export-CSV c:psinactive_computers.csv
Эта команда сформирует текстовый CSV файл со списком неактивных компьютеров, которые не регистрировались в сети более полугода.
Вы можете отключить найденные учетные записи компьютеров:
Get-ADComputer -Properties LastLogonTimeStamp -Filter {LastLogonTimeStamp -lt $LastLogonDate } -SearchBase ‘OU=Computers,OU=MSK,dc=winitpro,dc=ru’| Disable-ADAccount
Перенести их в отдельный OU:
Get-ADComputer ... | Move-ADObject -TargetPath “OU=Disabled Computers,DC=winitpro,DC=ru”
Или удалить:
Get-ADComputer ... | Remove-ADComputer
Поиск неактивных учетных записей пользователей в Active Directory
Для поиска учетных записей неактивных пользователей также можно использовать атрибут lastLogonTimeStamp. Для построения списка неактивных учетных записей нужно использовать именно этот атрибут, а не lastLogon (последний не реплицируется между контроллерами домена).
Следующий скрипт позволит выбрать включенные (незаблокированные) учетные записи пользователей, которые не авторизовались в домене более полугода (180 дней) с помощью командлета Get-ADUser:
$LastLogonDate= (Get-Date).AddDays(-180)
Get-ADUser -Properties LastLogonTimeStamp -Filter {LastLogonTimeStamp -lt $LastLogonDate } -SearchBase ‘OU=Users,OU=MSK,dc=winitpro,dc=ru’| ?{$_.Enabled –eq $True} | Sort LastLogonTimeStamp| FT Name, @{N='lastlogontimestamp'; E={[DateTime]::FromFileTime($_.lastlogontimestamp)}} -AutoSize | Export-CSV c:psinactive_users.csv
В целях безопасности вы можете отключить учетные записи неактивных пользователей:
Get-ADUser -Properties LastLogonTimeStamp -Filter {LastLogonTimeStamp -lt $LastLogonDate } -SearchBase ‘OU=Users,OU=MSK,dc=winitpro,dc=ru’| Disable-ADAccount
Если нужно удалить неактивных пользователей, используйте пайплайн с Remove-ADUser.
Search-ADAccount: командлет для поиска неиспользуемых объектов в AD
Для поиска неактивных в объектов в AD можно использовать командлеты Get-ADUser, Get-ADComputer или Get-ADObject. Однако создание правильного фильтра для этих команд может вызывать определенные затруднения. В модуле PowerShell для ActiveDirectory есть более удобный командлет для выполнения таких задач — Search-ADAccount. Этот командлет используется для поиска объектов любого типа (как пользователей, так и компьютеров). Рассмотрим примеры использования командлета Search-ADAccount для типовых задач поиска отключенных, неактивных и заблокированных объектов в AD.
Перечислим список наиболее интересных для нас ключей командлета Search-ADAccount:
Ключ Search-ADAccount | Описание |
-AccountDisabled
|
Поиск отключенных учетных записей |
-AccountExpired
|
Учетные записи с истекшим сроком действия учетки |
-AccountExpiring [-DateTime DateTime] [-TimeSpan TimeSpan]
|
Учетные записи которые просрочатся в течении определенного периода (-TimeSpan) или в определенную дату(-DateTime) |
-AccountInactive [-DateTime DateTime] [-TimeSpan TimeSpan]
|
Учетные записи, не регистрировавшиеся в домене начиная с определенной даты(-DateTime) или в течении определенного периода времени (-TimeSpan) |
-LockedOut
|
Учетные записи, заблокированные парольной политикой |
-PasswordExpired
|
Учетные записи, пароль которых просрочен |
-PasswordNeverExpires
|
Учетные записи, у которых установлен атрибут PasswordNeverExpires |
Примечание. По умолчанию командлет Search-ADAccount выполняет поиск по пользователю и компьютеров одновременно. Чтобы искать только по пользователям или компьютерам, нужно использовать ключ ComputersOnly или UsersOnly соответственно.
К примеру, выведем список отключенных учетных записей пользователей во всем домене:
Search-ADAccount -UsersOnly –AccountDisabled
Можно ограничить область поиска определенным контейнером (OU) Active Directory так:
Search-ADAccount -UsersOnly –AccountDisabled –searchbase "OU=Admins,OU=Accounts,DC=winitpro,DC=loc"
Эти же данные можно представить в более удобном табличном виде с помощью команды:
Search-ADAccount -UsersOnly -AccountDisabled -searchbase "OU=Admins,OU=Accounts,DC=winitpro,DC=loc"|ft -AutoSize
Если вам нужно получить список отключенных пользователей, содержащий только определённые атрибуты пользователей и представить в виде графической таблицы с возможностью сортировки, выполните:
Search-ADAccount -UsersOnly -AccountDisabled |sort LastLogonDate | Select Name,LastLogonDate,DistinguishedName |out-gridview -title "Disabled Users"
Список заблокированных учетных записей пользователей:
Search-ADAccount -UsersOnly –LockedOut
Список учетных записей пользователей, неактивных в течении 60 дней:
$timespan = New-Timespan –Days 60
Search-ADAccount –UsersOnly –AccountInactive –TimeSpan $timespan | ?{$_.Enabled –eq $True}
Чтобы посчитать количество таких пользователей:
Search-ADAccount –UsersOnly –AccountInactive –TimeSpan $timespan | ?{$_.Enabled –eq $True} | Measure
Список компьютеров, которые не регистрировались в домене в течении последних 90 дней:
Search-ADAccount -AccountInactive –ComputersOnly -TimeSpan 90
Либо с определенной даты:
Search-ADAccount -AccountInactive -ComputersOnly -DateTime ‘1/1/2020’|Select Name,LastLogonDate| ft
Для выгрузки полученных данных в CSV файл воспользуйтесь командой:
Search-ADAccount -AccountDisabled -UsersOnly| Export-Csv "c:psdisabled_users.csv"
PowerShell
Поиск неактивных и отключенных компьютеров/пользователей в Active Directory с помощью PowerShell