Как узнать когда включался компьютер в домене
Допустим, ваша задача – найти в Active Directory все неактивные компьютеры, которые не регистрировались в домене более 120 дней и заблокировать учетные записи этих компьютеров.
Прежде чем приступить к работе с командлетом Get-ADComputer, необходимо подключить модуль Active Directory Module for Windows PowerShell.
Совет. В PowerShell 3.0 (представлен в Windows Server 2012) и выше этот модуль подключается по умолчанию при установке компонента Remote Server Administration Tools -> Role Administration Tools -> AD DS and AD LDS Tools -> Active Directory модуль для Windows PowerShell. Чтобы использовать командлет Get-ADComputer в клиентских Windows 10,8.1 и Windows 7 нужно скачать и установить RSAT для вашей версии ОС и включить модуль AD-PowerShell из панели управления или командой:Enable-WindowsOptionalFeature -Online -FeatureName RSATClient-Roles-AD-Powershell
Основы синтаксиса и использование командлета Get-ADComputer
Справка о параметрах командлета Get-ADComputer вызывается стандартно с помощью Get-Help:
Чтобы получить информацию о доменной учетной записи конкретного компьютера или сервера, укажите его имя в качестве аргумента параметра —Identity:
Get-ADComputer -Identity SRV-DB01
Командлет вернул только базовые свойства объекта Computer из AD. Нас интересует время последней регистрации компьютера в домене AD, но этой информация в выводе команды нет. Выведем все доступные свойства данного компьютера из Active Directory:
Get-ADComputer -Identity SRV-DB01 -Properties *
Get-ADComputer -Filter * -Properties * | Get-Member
Как вы видите, время последнего входа данного компьютера в сеть указано в атрибуте компьютера LastLogonDate – 21.09.2015 0:20:17.
Командлет Get-ADComputer позволяет вывести в результатах команды любые из свойств компьютера. Уберем всю лишнюю информацию, оставив в выводе только значения полей Name и LastLogonDate.
Get-ADComputer -identity SRV-DB01 -Properties * | FT Name, LastLogonDate -Autosize
Итак, мы получили данные о последнем времени регистрации в домене для одного компьютера. Теперь нам нужно изменить команду так, чтобы она возвращала информацию о времени последней регистрации в сети для всех компьютеров домена. Для этого заменим параметр –Identity на —Filter:
Get-ADComputer -Filter * -Properties * | FT Name, LastLogonDate -Autosize
Мы получили таблицу, которая содержит только 2 поля: имя компьютера и дата LastLogonData. Вы можете добавить в эту таблицу другие поля объекта Computer из AD. Чтобы вывести данные о компьютерах в определенном контейнере домена (OU), воспользуйтесь параметром SearchBase:
Get-ADComputer -SearchBase ‘OU=Moscow,DC=winitpro,DC=loc’ -Filter * -Properties * | FT Name, LastLogonDate -Autosize
Отсортируем результаты запроса по времени последнего логина в сеть (поле LastLogonDate) с помощью команды Sort:
Get-ADComputer -Filter * -Properties * | Sort LastLogonDate | FT Name, LastLogonDate -Autosize
Итак, мы получили список компьютеров домена и время их последнего входа в сеть Active Directory. Теперь мы хотим заблокировать учетные записи компьютеров, которые не использовались более 120 дней.
С помощью Get-Date получим в переменной значение текущей даты и вычтем из текущей даты 120 дней:
Полученную переменную с датой можно использовать в качестве фильтра запроса Get-ADComputer по полю LastLogonDate
Get-ADComputer -Properties LastLogonDate -Filter | Sort LastLogonDate | FT Name, LastLogonDate -Autosize
Таким образом, мы получили список неактивных компьютеров, не регистрировавшихся в сети более 120 дней. С помощью командлета Set-ADComputer или Disable-ADAccount вы можете отключить эти учетные записи.
Совет. В первый раз лучше протестировать результаты команды с помощью переключателя –WhatIf, благодаря которому команда не вносит никаких изменений, показывая, что произойдет при ее выполнении.Get-ADComputer -Properties LastLogonDate -Filter | Set-ADComputer -Enabled $false -whatif
Теперь можно заблокировать все полученные учетные записи компьютеров:
Get-ADComputer -Properties LastLogonDate -Filter | Set-ADComputer -Enabled $false
Совет. Список заблокированных, отключенных и неактивных компьютеров и пользователей домена можно получить также с помощью отдельного командлета Search-ADAccount.Примеры использования командлета Get-ADComputer
Ниже представлены еще несколько полезных примеров команд с использованием командлета Get-ADComputer, которые можно использовать для выборки и поиска компьютеров домена по определенными критериям.
Получить общее количество активных (незаблокированных) компьютеров в Active Directory:
Посчитать количество серверов с Windows Server в домене:
Получить список компьютеров в определенном OU, имена которых начинаются с BuhPC:
Get-ADComputer -Filter -SearchBase ‘OU=Moscow,DC=winitpro,DC=loc’ -Properties IPv4Address | Format-table Name,DNSHostName,IPv4Address | ft -Wrap –Auto
При поиске по OU вы можете использовать дополнительный параметр -SearchScope 1, который означает, что нужно искать только в корневом разделе. Параметр -SearchScope 2 означает рекурсивный поиск компьютеров во всех вложенных OU.
Выбрать все рабочие станции с ОС Windows 10:
Получить список серверов в домене с версией ОС, IP адресом и установленным Service Pack:
Get-ADComputer -Filter 'operatingsystem -like "*Windows server*" -and enabled -eq "true"' -Properties Name,Operatingsystem, OperatingSystemVersion, OperatingSystemServicePack,IPv4Address | Sort-Object -Property Operatingsystem | Select-Object -Property Name,Operatingsystem, OperatingSystemVersion, OperatingSystemServicePack, IPv4Address| ft -Wrap –Auto
На выходе получили такую красивую таблицу со списком Windows Server в AD.
Атрибут -LDAPFilter позволяет использовать в качестве параметра командлета Get-ADComputer различные LDAP запросы, например:
Get-ADComputer -LDAPFilter "(name=*db*)"|ft
Выбрать заблокированные компьютеры в определенном OU:
Get-ADComputer -filter * -SearchBase ‘OU=Computers, dc=winitpro,dc=loc’ | Where-Object
Чтобы удалить все аккаунты компьютеров в домене, не авторизовавшиеся в домене более 6 месяцев, можете воспользоваться командой:
get-adcomputer -properties lastLogonDate -filter * | where < $_.lastLogonDate -lt (get-date).addmonths(-6) >| Remove-ADComputer
Результат выполнения команды Get-ADComputer можно выгрузить в текстовый файл:
Get-ADComputer -Filter < OperatingSystem -Like '*Windows Server 2008*' >-Properties OperatingSystem | Select DNSHostName, OperatingSystem | Format-Table -AutoSize C:\Script\server_system.txt
Также вы можете получить выборку компьютеров и экспортировать его в CSV файл:
Get-ADComputer -Filter * -Property * | Select-Object Name,OperatingSystem,OperatingSystemServicePack | Export-CSV All-Windows.csv -NoTypeInformation -Encoding UTF8
Или получить HTML файл отчета со списком компьютеров и нужных атрибутов компьютера:
Get-ADComputer -Filter -Properties * | Select-Object Name,OperatingSystem | ConvertTo-Html | Out-File C:\ps\ad_computer.html
Чтобы выполнить определенной действие со всеми компьютерами из полученного списка нужно использовать цикл Foreach. В этом примере мы хотим получить список серверов в домене с моделью и производителем:
$Computers = Get-ADComputer -Filter
Foreach ($Computer in $Computers)
$Hostname = $Computer.Name
$ComputerInfo = (Get-WmiObject -Computername $Hostname Win32_ComputerSystem)
$Manufacturer = $Computer.Manufacturer
$Model = $Computer.Model
Write-Host "Name: $Hostname"
Write-Host "Manufacturer: $Manufacturer"
Write-Host "Model: $Model"
Write-Host " "
$Content = "$Hostname;$Manufacturer;$Model"
Add-Content -Value $Content -Path "C:\PS\ServersInfo.txt"
>
Либо можно использовать более короткий синтаксис цикла. Допустим нам нужно выполнить определенную команду на всех компьютерах в определенном OU (в этом примере мы хотим запустить на всех серверах команду обновления настроек групповых политик):
Затем с помощью следующей команды я могу найти компьютеры, на которых отсутствует или не запушена служба CCMExec:
get-adcomputer -filter -SearchBase “OU=Computers,OU=MSK,DC=winitpro,DC=ru” -properties dNSHostName,extensionAttribute10,LastLogonDate |select-object dNSHostName,extensionAttribute10,LastLogonDate
Администратор Active Directory должен периодически отключать и деактивировать объекты в AD. Рассмотрим, как получить время последнего входа в систему для пользователя домена AD и найти учетные записи, которые были неактивны более 90 дней.
Узнать время последнего входа в систему для пользователя домена можно с помощью оснастки Пользователи и компьютеры Active Directory.
Нажмите Win+R и введите dsa.msc;
В верхнем меню включите опцию «Вид» -> «Дополнительные компоненты»;
В дереве AD выберите нужного пользователя и откройте «Свойства»;
Нажмите на вкладку «Редактор атрибутов»;
В списке атрибутов найдите lastLogon. Этот атрибут содержит время последнего входа пользователя в домен.
Найти время последнего входа в систему с помощью CMD
Вы можете узнать время последнего входа пользователя в домен из командной строки, используя инструмент net.
Откройте командную строку (вам не нужны права администратора домена для получения информации о пользователе AD) и выполните команду:
Вы получили время последнего входа пользователя user02: 29.11.2019 18:40:38.
Как узнать время последнего входа в систему с помощью PowerShell
Вы также можете использовать PowerShell, чтобы получить время последнего входа пользователя в домен. Для этого вам нужно использовать
Модуль Active Directory для Windows PowerShell . Установите этот модуль и импортируйте его в сеанс PowerShell:
Чтобы найти время последнего входа в систему для учетной записи пользователя домена user02, выполните команду:
Командлет вернул время в формате метки времени. Чтобы преобразовать его в обычное время, используйте следующую команду:
Используя PowerShell, вы вы также можете отобразить время Lastlogon для всех включенных пользователей домена:
Администратор Active Directory должен периодически удалять неактивные объекты (пользователя, компьютеры) в базе Active Directory. В этой статье мы покажем, как узнать время последнего входа в домен пользователя AD и найти учетные записи, которые неактивны более 1 года.
Вы можете узнать время последнего входа пользователя в домен AD несколькими способами.
Как получить время входа пользователя в домен в консоли ADUC?
Вы можете узнать время последнего входа пользователя в систему из графической консоли ADUC (Active Directory Users and Computers).
Время последнего входа пользователя из командной строки
Вы можете узнать время последнего входа пользователя в домен из командной строки с помощью net user и dsquery.
Откройте командную строку (не обязательно с правами администратора домена) и выполните команду:
net user administrator /domain| findstr "Last"
Вы получили время последнего входа данного пользователя.
Также вы можете получить время последнего входа с помощью dsquery. Например для учетной записи slpetrov:
dsquery * domainroot -filter "(&(objectCategory=Person)(objectClass=User)(sAMAccountName=slpetrov))" -attr distinguishedName lastLogon lastLogonTimestamp -limit 0
Главная проблема в том, что атрибуты lastLogon и lastLogonTimestamp в AD хранятся в формате timestamp и вам нужно дополнительно конвертировать его в нормальный формат времени.
Также вы можете использовать эту команду, чтобы найти всех пользователей, которые неактивны в течении, например, 10 недель:
dsquery user domainroot -inactive 10
Узнать время последнего входа пользователя с помощью PowerShell
Также вы можете использовать PowerShell для получения времени последнего входа пользователя в домен. Для этого вам понадобится модуль Active Directory для PowerShell. Установите данный модуль и импортируйте его в свою сессию PowerShell:
Чтобы получить время последнего входа пользователя administrator, выполните команду:
Get-ADUser -Identity administrator -Properties LastLogon
Командлет Get-ADUser вернул время в формате TimpStamp. Чтобы преобразовать его в нормальное время используйте такую команду:
С помощью PowerShell вы можете вывести значение Lastlogon для всех пользователей домена:
Или можно найти пользователей, которые неактивны более полугода (180 дней):
$date1= (Get-Date).AddDays(-180)
Get-ADUser -Properties LastLogonDate -Filter | ft
Чтобы вовремя отключать неиспользуемые учетные записи, нужно знать, когда кто-то под ними заходил. Чаще всего если под учеткой никто не работал в течение пары месяцев, значит, человек уже уволился или перевелся. Поскольку все данные о попытках входа хранятся в свойствах пользователя Active Directory, отыскать мертвые души будет несложно.
Первым делом нужно включить отображение дополнительных свойств, это делается через меню View -> Advanced Features. Интересующие нас данные хранятся в атрибутах lastLogon и lastLogonTimestamp, а о неудачных попытках входа ты узнаешь из полей badPasswordTime и badPwdCount.
Если у тебя стоит один контроллер домена, эти данные тебя полностью устроят, но если нет, то возникнут проблемы. Значения lastLogon, badPasswordTime и badPwdCount не реплицируются между контроллерами, а отследить, на какой из них авторизовался пользователь, — та еще задачка.
Начиная с Windows Server 2008 в AD как раз для этих целей появились дополнительные атрибуты, которые решают проблему. Вот они:
- msDS-FailedInteractiveLogonCount — общее количество ошибочных попыток логона в систему;
- msDS-FailedInteractiveLogonCountAtLastSuccessfulLogon — количество фейловых попыток логона с момента последней успешной авторизации;
- msDS-LastFailedInteractiveLogonTime — время последней неудачной попытки;
- msDS-LastSuccessfulInteractiveLogonTime — время последней удачной попытки.
Эти атрибуты успешно реплицируются, и им можно верить при отслеживании логона, нужно только их включить. Для этого создай новый объект групповой политики и привяжи его к Domain Controllers. После этого в ветке Computer ConfigurationAdministrative TemplatesSystemKDC включай политику Provide information about previous logons to client computers. Теперь контроллеры будут собирать необходимые данные.
Чтобы полностью автоматизировать чистку, можешь написать небольшой скрипт, который будет проверять значения и, к примеру, слать тебе уведомление о том, что учетка истекла.
Читайте также: