Get-ADComputer: примеры вывода данных о компьютерах Active Directory

Обновлено 20.05.2022

Get-ADComputer

Добры день! Уважаемые читатели и гости IT блога Pyatilistnik.org. В прошлый раз мы с вами разобрали ситуацию, когда не открывается пуск Windows 10, в итоге было рассмотрено свыше 8 методов по устранению. Идем вперед и сегодня я хочу вас научить получать информацию, о компьютерах Active Directory через PowerShell. Мы разберем огромное количество сценариев применения командлета Get-ADComputer с ключами, фильтрами и различными конструкциями.

За что отвечает командлет Get-ADComputer?

Когда ваша инфраструктура предприятия построена на базе Active Directory, то вы рано или поздно придете к задаче по получению различных данных о учетных записях компьютеров, проще говоря по серверам и рабочим станциям. PowerShell для этой задачи подходит лучше всего, так как он быстрее, позволяет автоматизацию и многое другое. Для этого в PowerShell есть командлет Get-ADComputer.

Простой пример использования Get-ADComputer, предположим, что вам нужно получить:

Get-ADComputer - Это наилучший инструмент по получению любых сведений, о компьютерах в Active Directory

Как работать с командлетом Get-ADComputer

Для того, чтобы начать работать с командлетом Get-ADComputer, вы должны:

  • Либо это делать на контроллере домена, где уже есть все нужные оснастки
  • Либо вы должны установить RSAT в случае с клиентскими ОС, например на Windows 11 или установить модуль в диспетчере серверов на Windows Server

Установка модуля Active Directory на клиентских ОС

Если вы работаете на контроллере домена, то вам достаточно просто ввести Get-ADComputer, нужный модуль подключиться автоматически. Если мы говорим про клиентские операционные системы, то ставим RSAT по инструкции или начиная с Windows 10 вы можете поставить модуль через команду:

Add-WindowsCapability -online -Name "Rsat.ActiveDirectory.DS-LDS.Tools"

Установка модуля activedirectory

и далее в оснастке PowerShell введите:

Import-Module activedirectory

Установка модуля Active Directory на Windows Server

Когда на сервере нет модуля Active Directory, то при попытке его импортировать вы получите ошибку:

Import-Module : Указанный модуль "activedirectory" не был загружен, так как ни в одном из каталогов модулей не был обнаружен действительный файл модуля.

Import-Module : Указанный модуль "activedirectory" не был загружен, так как ни в одном из каталогов модулей не был обна ружен действительный файл модуля.

Чтобы это поправить введите с оснастке PowerShell:

Import-Module ServerManager
Add-WindowsFeature -Name "RSAT-AD-PowerShell" –IncludeAllSubFeature

Модуль Active Directory для Windows

Либо вы можете это сделать через графический интерфейс оснастки "Диспетчер серверов".

Управление - Добавить роли и компоненты - Установка ролей или компонентов -  Далее - Далее - Средства удаленного администрирования серверов - Средства администрирования ролей - Средства AD DS и AD LDS - Модуль Active Directory для Windows PowerShell (Remote Server Administration Tools - Role Administration Tools - AD DS and AD LDS Tools - Active Directory module for Windows powerShell)

Установка Модуля Active Directory для Windows.png

Параметры фильтров Get-ADComputer

Для поиска и извлечения нескольких компьютеров используйте параметры Filter или LDAPFilter. Параметр Filter является общим параметром среди многих команд ActiveDirectory. Он позволяет указать условия, которым должна соответствовать учетная запись для ее возврата. Если Identity параметр не используется, необходимо использовать Filter параметр.

  • -eq - Равно
  • -ne - Не равно
  • -gt - Лучше чем
  • -ge - Больше или равно
  • -lt - Меньше чем
  • -le - Меньше или равно
  • -like - Поиск с подстановочными знаками
  • -notlike - Поиск подстановочных знаков с отрицанием
  • -and - И
  • -or - Или

Примеры использования командлета Get-ADComputer

Если вы впервые работаете с командами Get-ADComputer, и под рукой нет готовых примером, то вы можете их посмотреть в справке. Для этого введите команду:

Get-Help Get-ADComputer

Хочу напомнить, что запрашивать данные, о компьютерах Active Directory через модуль AD for Powershell может любой пользователь домена, если ему это явным образом не запрещали делать

Вызов справки Get-ADComputer

В первом примере мы с вами получим базовую информацию о конкретном доменном компьютере или сервере. в моем примере это будет компьютер с именем 5ORG. Вводим команду:

Get-ADComputer -Identity 5ORG

На выходе вы увидите его расположение в DistinguishedName, статус его активности, SamAccountName, SID и ObjectGUID.

DistinguishedName : CN=5ORG,OU=Windows 11, OU=Компьютеры,OU=Оргструктура, DC=root,DC=pyatilistnik,DC=org
DNSHostName : 5org.root.pyatilistnik.org
Enabled : True
Name : 5ORG
ObjectClass : computer
ObjectGUID : ed7d9f38-7be0-4e81-bb8b-c17d445a35a8
SamAccountName : 5ORG$
SID : S-1-5-21-4284852150-1823218374-53464103-2106
UserPrincipalName :

Get-ADComputer получение данных о конкретном компьютере

Согласитесь, что этого мало и нужно больше информации. Попросим Get-ADComputer вывести все свойства, которые есть у объекта компьютер. Для этого добавляем ключ -Properties. Вводим команду:

Get-ADComputer -Identity 5ORG -Properties *

"*" - Означает, что нужно вывести все.

Из полезного тут:

Get-ADComputer вывод всех свойств компьютера

  • lastLogon
  • LastLogonDate - Время последнего входа в сеть
  • OperatingSystem - Версия ОС
  • whenCreated - Когда создан
  • Многое другое

AD computer properties

Как видите свойств много, давайте я покажу вам как вы можете сами выбирать те свойства которые вы хотите выводить. Давайте я выведу дату создания, время последнего входа, имя компьютера, его статус (активный/отключенный) и Ip-адрес. Для этого:

Get-ADComputer -identity 5ORG -Properties * | FT Name, whenCreated, OperatingSystem, LastLogonDate, Enable -Autosize

Get-ADComputer вывод нужных свойств

Иногда бывает ситуация, что нужно обратиться к определенному контроллеру домена с запросом, для этого есть ключ -Server:

Get-ADComputer -Server dc01.root.pyatilistnik.org -identity 5ORG -Properties * | FT Name, whenCreated, OperatingSystem, LastLogonDate, Enable -Autosize

Как видите я обратился к двум разным контроллерам домена. Данная возможность будет вам весьма полезна, когда у вас в лесу несколько доменов Active Directory.

Get-ADComputer обращение к нужному DC

Фильтры в Get-ADComputer

Теперь предположим, что вам необходимо получить информацию, о дате создания, времени входа, версии ОС, имени и статусу для всех компьютеров в домене. Тут мы уже будем использовать фильтры. Фильтры нужны для массовых запросов.

  • Как посмотреть все компьютеры в домене со свойствами через использование фильтров:

Get-ADComputer -Filter * -Properties * | FT

Get-ADComputer -Filter * -Properties Name, whenCreated, OperatingSystem, LastLogonDate | FT Name, whenCreated, OperatingSystem, LastLogonDate, Enable -Autosize

или

Get-ADComputer -Filter * -Properties * | FT Name, whenCreated, OperatingSystem, LastLogonDate, Enable -Autosize

Get-ADComputer использование фильтров

  • Чтобы ограничить вывод определенным количеством элементов, воспользуйтесь параметром -ResultSetSize. В примере будет выведено 3 элемента.

Get-ADComputer -Filter * -ResultSetSize 3 -Properties * | FT Name, whenCreated, OperatingSystem, LastLogonDate, Enable -Autosize

  • Запросим в фильтре точное совпадение с именем

Get-ADComputer -Filter 'Name -eq "5org"' | FT

  • Давайте теперь скажем. что покажи мне компьютеры, где в имени есть DC

Get-ADComputer -Filter 'Name -like "*dc*"' | FT

Get-ADComputer выполнение разных фильтров

  • Давайте теперь скажем. что покажи мне компьютеры, где в имени есть DC и нужными свойствами Name, IPv4Address, Enabled, DNSHostName

Get-ADComputer -Filter 'Name -like "*dc*"' -Properties Name, IPv4Address, DNSHostName | FT Name, IPv4Address, DNSHostName, Enabled

Get-ADComputer выполнение разных фильтров

  • Еще вариант вывода информации, о всех компьютерах по разным критериям и сортировкой по имени.

Get-ADComputer -Filter 'Name -like "*dc*"' -Properties Name, IPv4Address, DNSHostName | Select Name, IPv4Address, DNSHostName, Enabled | Sort Name

или еще проще:

Get-ADComputer -Filter * -Properties * | FT Name, whenCreated, OperatingSystem, LastLogonDate, Enable -Autosize

Get-ADComputer получение списка всех компьютеров с сортировкой по имени

  • Выводим список всех компьютеров в домене у которых операционная система Windows Server, так же возьмем описание lastLogon, whenCreated, DistinguishedName и чтобы учетная запись компьютера была активной.

Get-ADComputer -Filter {OperatingSystem -Like "*Windows Server*" -and Enabled -eq $true} -Properties * | select Name, DistinguishedName, whenCreated, @{n='lastLogonTimestamp';e={[DateTime]::FromFileTime($_.lastLogonTimestamp)}}, Description, Enabled | sort Name

Get-ADComputer вывод всех компьютеров с операционной системой Windows Server

  • Как вывести все компьютеры без виртуальных имен. таких как роли DFS или инстансы в SQL, они часто имеют в поле описания "Failover cluster virtual network name account".

Get-ADComputer -Filter {OperatingSystem -Like "*Windows Server*" -and Enabled -eq $true} -Properties * | ? {$_.Description -notlike "*Failover cluster virtual network name account*"} | select Name, DistinguishedName, whenCreated, @{n='lastLogonTimestamp';e={[DateTime]::FromFileTime($_.lastLogonTimestamp)}}, Description, Enabled | sort Name

  • Если нужно обратиться к конкретному OU, то можно использовать ключ -SearchBase.

Get-ADComputer -SearchBase "CN=Computers,DC=root,DC=pyatilistnik,DC=org" -Filter {OperatingSystem -Like "*Windows Server*" -and Enabled -eq $true} -Properties * | ? {$_.Description -notlike "*Failover cluster virtual network name account*"} | select Name, DistinguishedName, whenCreated, @{n='lastLogonTimestamp';e={[DateTime]::FromFileTime($_.lastLogonTimestamp)}}, Description, Enabled | sort Name

Делая поиск по конкретному OU вы можете использовать дополнительные параметры. -SearchScope 1, который означает, что нужно искать только в корневом разделе. Параметр -SearchScope 2 означает рекурсивный поиск компьютеров во всех вложенных OU

  • добавим экспорт в CSV файл весь список компьютеров Active Ditectory, чтобы потом проще было с ним взаимодействовать ( Читайте так же как разделить CSV по столбцам).

Get-ADComputer -SearchBase "CN=Computers,DC=root,DC=pyatilistnik,DC=org" -Filter {OperatingSystem -Like "*Windows Server*" -and Enabled -eq $true} -Properties * | ? {$_.Description -notlike "*Failover cluster virtual network name account*"} | select Name, DistinguishedName, whenCreated, @{n='lastLogonTimestamp';e={[DateTime]::FromFileTime($_.lastLogonTimestamp)}}, Description, Enabled | sort Name | Export-Csv C:\Temp\IS_May_13.txt -NoTypeInformation -Force

Get-ADComputer экспортируем полученную информацию в CSV файл

  • Еще приведу примеры фильтров. Давайте выведем все компьютеры у которых операционная система не Windows 11 10.0 (22000).

Get-ADComputer -Filter 'OperatingSystemVersion -ne "10.0 (22000)"' | Select Name, DistinguishedName | FT -AutoSize

Get-ADComputer фильтрация по компьютерам имеющим альтернативную ОС

  • Теперь давайте найдем все компьютеры, которые не появлялись в сети более 45 календарных дней. Для этого такая конструкция:

# Задаем переменную, отнимающую от текущей даты 45 дней
$Date = (Get-Date).AddDays(-45)
Get-ADComputer -Properties LastLogonDate -Filter {LastLogonDate -gt $date} | Sort LastLogonDate  (или | Sort Name) | FT Name, LastLogonDate -Autosize

Get-ADComputer поиск всех компьютеров не появлявшихся в сети более 45 дней

  • Далее вы данный список можете полученных компьютеров можете заблокировать, это нормально и позволит держать базу Active Directory в надлежащем состоянии.

$Date = (Get-Date).AddDays(-45)
Get-ADComputer -Properties LastLogonDate -Filter {LastLogonDate -gt $date} | Sort LastLogonDate | Set-ADComputer -Enabled $false -whatif

Обратите внимание, что я для начала добавил ключ -whatif, который позволит посмотреть вывод команды без реального внесения изменений, если все правильно отработало, то смело можете его убирать

Get-ADComputer блокировка неактивных компьютеров

  • Получаем список компьютеров имеющие изменения на 15 мая 2022

Get-ADComputer -Filter 'Modified -ge "15-05-2022 12:00:00"' | FT Name

  • Как вывести список компьютеров с нужными или всеми свойствами, созданными до 1 мая 2022 года.

Get-ADComputer -Filter * -Properties * | `
Where-Object -Property Created -LT (Get-Date -Year 2022 -Month 05 -Day 01) | FT Name

Не забываем, что вы можете сортировать выводить любые свойства:

$date = (Get-Date -Year 2021 -Month 12 -Day 31)
Get-ADComputer -Filter * -Properties * | `
Where-Object -Property Created -LT $date| `
select Name, Created | ft

Символ "`" - Делает перевод строки на новую

Get-ADComputer вывод компьютеров созданных ранее определенной даты

  • Теперь давайте разберемся, как вывести все отключенные записи компьютеров в домене, сразу оговорюсь, что как я и показывал выше вы можете это делать для конкретной OU или домена, указывая нужный сервер для запроса.

Get-ADComputer -Filter {Enabled -eq $False} | FT Name

  • Теперь логично, что вы хотели бы иметь понимание, сколько вообще активных компьютеров в домене.

(Get-ADComputer -Filter {enabled -eq "true"}).count

  • Можно это сделать в определенной OU

(Get-ADComputer -SearchBase "OU=Компьютеры,OU=Оргструктура, DC=root,DC=pyatilistnik,DC=org" -Filter {Enabled -eq $true}).count | ft

  • Можно вывести количество компьютеров с Windows 10 например.

(Get-ADComputer -Filter {enabled -eq "true" -and OperatingSystem -Like '*10*' }).count

  • Чтобы найти все компьютеры имена которых начинаются с W10.

Get-ADComputer -Filter {Name -like "w10*"} -Properties * | FT Name,DNSHostName,IPv4Address

Get-ADComputer поиск компьютеров по части имени

  • Получить список компьютеров созданных после 1 января 2020

Get-ADComputer -Filter 'Created -le "01-01-2020"' -Properties * | FT Name, Created

  • Получаем список компьютеров у которых операционная система не Windows Server 2016.

Get-ADComputer -Filter 'OperatingSystem -notlike "*2016*"' -property * | FT Name,OperatingSystem

Get-ADComputer Получаем список компьютеров у которых операционная система не Windows Server 2016

  • Выводим компьютеры с Windows Server 2012 и Windows Server 2019

Get-ADComputer -Filter 'OperatingSystem -like "*2012*" -or OperatingSystem -like "*2019*"' -property * | FT Name,OperatingSystem

Get-ADComputer Выводим компьютеры с Windows Server 2012 и Windows Server 2019

Автор - Сёмин Иван

Добавить комментарий

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