Поиск неактивных и отключенных компьютеров/пользователей в 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).

установка модуля Active Directory Module for Windows PowerShell

Модуль AD PowerShell также может быть включен командой:

Add-WindowsFeature RSAT-AD-PowerShell

Запустите консоль PowerShell и импортируйте модуль Active Directory в сессию:

Import-Module ActiveDirectory

Поиск старых (неактивных) компьютеров в домене

Для поиска неактивных компьютеров в домене можно использовать командлет Get-ADComputer. В качестве критерия поиска можно использовать атрибут LastLogonTimeStamp. Обратите внимание, что этот атрибут нельзя использовать для получения информации о времени последнего входа компьютера в домен в реальном времени. Однако благодаря тому, что этот атрибут реплицируется между DC раз в 9-14 дней, вы можете получить информацию о последнем входе компьютера в домен с любого контроллера домена (в отличии от атрибута LastLogonDate, который обновляется только на DC, через который выполнил вход компьютер).

Текущее значение атрибута LastLogonTimeStamp можно получить в свойствах компьютера в консоли ADUC на вкладке редактора атрибутов.

атрибут пользователей и компьютеров в ad LastLogonTimeStamp

Чтобы найти в определенном 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

powershell команда поиска неактивных компьютеров в active directory

Эта команда сформирует текстовый 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

поиск неактивных учеток пользователей в домене ad с помощью powershell

В целях безопасности вы можете отключить учетные записи неактивных пользователей:

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"

Список заблокированных пользователей в определенном OU Active Directory

Эти же данные можно представить в более удобном табличном виде с помощью команды:

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"

табличное представление GridViewСписок заблокированных учетных записей пользователей:

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

Список неактивных с начала года компьютеров в AD

Для выгрузки полученных данных в CSV файл воспользуйтесь командой:

Search-ADAccount -AccountDisabled -UsersOnly| Export-Csv "c:\ps\disabled_users.csv"


Предыдущая статья Следующая статья


Комментариев: 31 Оставить комментарий

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)