Довольной частой задачей, которую приходится выполнять администратору Active Directory, является формирование списка неактивных или отключенных учетных записей пользователей и/или компьютеров. Для получения списка неактивных объектов в домене Active Directory можно использовать как сохраненные LDAP запросы в консоли ADUC, так и командлеты PowerShell. В этой статье мы покажем, как использовать PowerShell для поиска неактивных учетных записей пользователей или компьютеров.
Для использование всех командлетов 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:\ps\inactive_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:\ps\inactive_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 -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:\ps\disabled_users.csv"