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


Добры день! Уважаемые читатели и гости IT блога Pyatilistnik.org. В прошлый раз мы с вами разобрали ситуацию, когда не открывается пуск Windows 10, в итоге было рассмотрено свыше 8 методов по устранению. Идем вперед и сегодня я хочу вас научить получать информацию, о компьютерах Active Directory через PowerShell. Мы разберем огромное количество сценариев применения командлета Get-ADComputer с ключами, фильтрами и различными конструкциями.
За что отвечает командлет Get-ADComputer?
Когда ваша инфраструктура предприятия построена на базе Active Directory, то вы рано или поздно придете к задаче по получению различных данных о учетных записях компьютеров, проще говоря по серверам и рабочим станциям. PowerShell для этой задачи подходит лучше всего, так как он быстрее, позволяет автоматизацию и многое другое. Для этого в PowerShell есть командлет Get-ADComputer.
Простой пример использования Get-ADComputer, предположим, что вам нужно получить:
- Полный список учетных записей компьютеров в AD или конкретном организационном подразделении (OU)
- Получить информацию по атрибутам компьютера и сделать по ним выгрузку
- Найти все неактивные компьютера
- Найти все новые компьютеры в Active Directory
- Найти все выключенные компьютеры
- Поиск компьютеров по операционной системе
- Многое другое
Get-ADComputer — Это наилучший инструмент по получению любых сведений, о компьютерах в Active Directory
Как работать с командлетом Get-ADComputer
Для того, чтобы начать работать с командлетом Get-ADComputer, вы должны:
- Либо это делать на контроллере домена, где уже есть все нужные оснастки
- Либо вы должны установить RSAT в случае с клиентскими ОС, например на Windows 11 или установить модуль в диспетчере серверов на Windows Server
Установка модуля Active Directory на клиентских ОС
Add-WindowsCapability -online -Name «Rsat.ActiveDirectory.DS-LDS.Tools»

и далее в оснастке PowerShell введите:
Import-Module activedirectory
Установка модуля Active Directory на Windows Server
Когда на сервере нет модуля Active Directory, то при попытке его импортировать вы получите ошибку:
Import-Module : Указанный модуль «activedirectory» не был загружен, так как ни в одном из каталогов модулей не был обнаружен действительный файл модуля.

Чтобы это поправить введите с оснастке PowerShell:
Import-Module ServerManager
Add-WindowsFeature -Name «RSAT-AD-PowerShell» –IncludeAllSubFeature

Либо вы можете это сделать через графический интерфейс оснастки «Диспетчер серверов«.
Управление — Добавить роли и компоненты — Установка ролей или компонентов — Далее — Далее — Средства удаленного администрирования серверов — Средства администрирования ролей — Средства 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)

Параметры фильтров Get-ADComputer
Для поиска и извлечения нескольких компьютеров используйте параметры Filter или LDAPFilter. Параметр Filter является общим параметром среди многих команд ActiveDirectory. Он позволяет указать условия, которым должна соответствовать учетная запись для ее возврата. Если Identity параметр не используется, необходимо использовать Filter параметр.
Примеры использования командлета Get-ADComputer
Если вы впервые работаете с командами Get-ADComputer, и под рукой нет готовых примером, то вы можете их посмотреть в справке. Для этого введите команду:
Get-Help Get-ADComputer
Хочу напомнить, что запрашивать данные, о компьютерах Active Directory через модуль AD for Powershell может любой пользователь домена, если ему это явным образом не запрещали делать

В первом примере мы с вами получим базовую информацию о конкретном доменном компьютере или сервере. в моем примере это будет компьютер с именем 5ORG. Вводим команду:
Get-ADComputer -Identity 5ORG
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 вывести все свойства, которые есть у объекта компьютер. Для этого добавляем ключ -Properties. Вводим команду:
Get-ADComputer -Identity 5ORG -Properties *
«*» — Означает, что нужно вывести все.
Из полезного тут:

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

Как видите свойств много, давайте я покажу вам как вы можете сами выбирать те свойства которые вы хотите выводить. Давайте я выведу дату создания, время последнего входа, имя компьютера, его статус (активный/отключенный) и Ip-адрес. Для этого:
Get-ADComputer -identity 5ORG -Properties * | FT Name, whenCreated, OperatingSystem, LastLogonDate, Enable -Autosize

Иногда бывает ситуация, что нужно обратиться к определенному контроллеру домена с запросом, для этого есть ключ -Server:
Get-ADComputer -Server dc01.root.pyatilistnik.org -identity 5ORG -Properties * | FT Name, whenCreated, OperatingSystem, LastLogonDate, Enable -Autosize
Как видите я обратился к двум разным контроллерам домена. Данная возможность будет вам весьма полезна, когда у вас в лесу несколько доменов Active Directory.

Фильтры в 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

- Чтобы ограничить вывод определенным количеством элементов, воспользуйтесь параметром -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

- Давайте теперь скажем. что покажи мне компьютеры, где в имени есть DC и нужными свойствами Name, IPv4Address, Enabled, DNSHostName
Get-ADComputer -Filter ‘Name -like «*dc*»‘ -Properties Name, IPv4Address, DNSHostName | FT Name, IPv4Address, DNSHostName, Enabled

- Еще вариант вывода информации, о всех компьютерах по разным критериям и сортировкой по имени.
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

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

- Как вывести все компьютеры без виртуальных имен. таких как роли DFS или инстансы в SQL, они часто имеют в поле описания «Failover cluster virtual network name account».
- Если нужно обратиться к конкретному OU, то можно использовать ключ -SearchBase.
Делая поиск по конкретному OU вы можете использовать дополнительные параметры. -SearchScope 1, который означает, что нужно искать только в корневом разделе. Параметр -SearchScope 2 означает рекурсивный поиск компьютеров во всех вложенных OU

- Еще приведу примеры фильтров. Давайте выведем все компьютеры у которых операционная система не Windows 11 10.0 (22000).
Get-ADComputer -Filter ‘OperatingSystemVersion -ne «10.0 (22000)»‘ | Select Name, DistinguishedName | FT -AutoSize

- Теперь давайте найдем все компьютеры, которые не появлялись в сети более 45 календарных дней. Для этого такая конструкция:
# Задаем переменную, отнимающую от текущей даты 45 дней
$Date = (Get-Date).AddDays(-45)
Get-ADComputer -Properties LastLogonDate -Filter -gt $date> | Sort LastLogonDate (или | Sort Name) | FT Name, LastLogonDate -Autosize

- Далее вы данный список можете полученных компьютеров можете заблокировать, это нормально и позволит держать базу Active Directory в надлежащем состоянии.
$Date = (Get-Date).AddDays(-45)
Get-ADComputer -Properties LastLogonDate -Filter | Sort LastLogonDate | Set-ADComputer -Enabled $false -whatif
Обратите внимание, что я для начала добавил ключ -whatif, который позволит посмотреть вывод команды без реального внесения изменений, если все правильно отработало, то смело можете его убирать

- Получаем список компьютеров имеющие изменения на 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
Символ «`» — Делает перевод строки на новую

- Теперь давайте разберемся, как вывести все отключенные записи компьютеров в домене, сразу оговорюсь, что как я и показывал выше вы можете это делать для конкретной OU или домена, указывая нужный сервер для запроса.
Get-ADComputer -Filter
- Теперь логично, что вы хотели бы иметь понимание, сколько вообще активных компьютеров в домене.
(Get-ADComputer -Filter
- Можно это сделать в определенной OU
(Get-ADComputer -SearchBase «OU=Компьютеры,OU=Оргструктура, DC=root,DC=pyatilistnik,DC=org» -Filter
- Можно вывести количество компьютеров с Windows 10 например.
(Get-ADComputer -Filter
- Чтобы найти все компьютеры имена которых начинаются с W10.
Get-ADComputer -Filter

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

- Выводим компьютеры с Windows Server 2012 и Windows Server 2019
Get-ADComputer -Filter ‘OperatingSystem -like «*2012*» -or OperatingSystem -like «*2019*»‘ -property * | FT Name,OperatingSystem

Популярные Похожие записи:
Get-ADUser и примеры использования- Скрипт получения новых компьютеров в Active Directory
- Установка и управление модулями PowerShell
- Как удалить sIDHistory у объектов Active Directory
Get-ADGroup: Управление группами Active Directory- Ошибка активации 0xC004F034 на KMS сервере
Как узнать имя пользователя в домене?
Найдите на своём компьютере «Этот компьютер ». Нажмите на правую кнопку мыши и выберите «Свойства». Там в блоке « Имя компьютера , имя домена и параметры рабочей группы» будет написан домен .
Как узнать имя пользователя и домен?
Найдите на своём компьютере «Этот компьютер». Нажмите на правую кнопку мыши и выберите «Свойства». Там в блоке « Имя компьютера, имя домена и параметры рабочей группы» будет написан домен .
Как узнать имя ПК в домене?
Нажмите кнопку Пуск, щелкните правой кнопкой мыши пункт Компьютер, а затем щелкните пункт Свойства. Имя компьютера появится в разделе Имя компьютера, имя домена и параметры рабочей группы.
Как узнать имя пользователя для RDP?
Клиент удаленного рабочего стола.
Самый быстрый способ – запустить диспетчер задач. Пуск -> Выполнить -> taskmgr.exe – > Пользователи
Как узнать свое имя в домене?
- Открыть сервис WHOIS в удобном браузере;
- Ввести в верхнем окне адрес IP;
- Ниже в строке «хост» отобразится соответствующее имя сайта.
Как узнать имя пользователя в сети?
Самым простым способом просмотреть имя аккаунта windows 10 — нажать кнопку Пуск, с правой стороны экрана вверху рамки нажать кнопку «Развернуть» в виде трёх горизонтальных полос, и вы увидите в нижнем углу пользователя компьютера, в данный момент авторизованного в системе.
Как узнать имя домена в локальной сети?
Для этого нажмите комбинацию клавиш Windows-R и выполните команду «CMD» либо запустите командную строку любым другим удобным способом. В открывшемся окне командной строки нужно выполнить команду «hostname», после чего операционная система выведет текущее название системы в локальной сети
Как узнать имя ПК в локальной сети?
- Нажать «Win» + «R» иввести «cmd». .
- Вбить строку «ping —a [название компьютера]». .
- Второй вариант — вбить команду «nbtstat —a [наименование ПК ]», после чего отобразится таблица со списком. .
- Можно также ввести «nslookup—a [название ПК ]».
Как узнать свое имя хоста?
- Откройте командную строку. Щелкните меню «Пуск» Windows и выполните поиск «cmd» или «Командная строка» на панели задач. .
- Введите ipconfig / all и нажмите Enter. Это отобразит вашу сетевую конфигурацию.
- Найдите имя хоста и MAC-адрес вашего устройства.
Как узнать имя пользователя для RDP?
Клиент удаленного рабочего стола.
Самый быстрый способ – запустить диспетчер задач. Пуск -> Выполнить -> taskmgr.exe – > Пользователи .
Что такое доменное имя компьютера, пример

Понять, что такое доменное имя компьютера, очень просто. Это его название, которое присваивается устройству при выходе в интернет. Уникальное имя может принадлежать только одному компьютеру.
Что такое доменное имя и для чего его присваивают
Домен – это часть адреса, определяющая место компьютера пользователя в сети. Каждый ПК при подключении к интернету получает собственный номер – IP-адрес. Эти данные представляют собой комплекс чисел. Но более удобно пользоваться не сложными цифровыми комбинациями, а словами. Доменное имя компьютера – это буквенное обозначение расположения ресурса. Двух одинаковых названий не бывает.
Все адреса поступают в DNS (Domain Name Service) – хранилище данных. В нем находятся сведения об адресах, записанных в числовом выражении и в виде слов.
Доменные имена компьютеров, зарегистрированных в домене первого уровня, условно объединены в группы:
- Географические – обозначают принадлежность к стране: ru (Россия), ua (Украина), de (Германия).
- Общие или административные закреплены за организациями или сферами деятельности: gov (правительство), net (сетевые услуги).
Домен второго уровня указывает адрес сайта, который регистрируют внутри верхней зоны. Эти имена оформляют на платной основе. Подробнее о том, где лучше купить домен второго уровня можно узнать здесь.
Третий уровень обозначает дополнительную структуру сервиса – форум или блог.
Пример
Пример доменного имени компьютера поможет разобраться в структуре названий, принятых в интернете. Символы, входящие в адрес, разделяются точкой. Начинают с последнего уровня, справа записывают суффикс, относящийся к верхней зоне:
- Записать доменное имя компьютера, зарегистрированного в домене первого уровня «бизнес», можно следующим образом: com. Название сайта Prodazha оформлено на первом уровне, а com обозначает принадлежность к коммерческой сфере.
- Доменное имя компьютера, зарегистрированного в домене первого уровня «образование», записывают как library.edu или любое другое название.
Выбрать запоминающееся имя непросто, большинство из них уже занято. На нашем сайте можно купить имя, которое привлечет к вам посетителей и повлияет на успешность бизнеса.
Как узнать доменное имя компьютера
Если машина входит в локальную сеть, имя выбирает системный администратор. Чтобы узнать такое доменное имя компьютера, выполняют несложные действия:
- Находят значок «Компьютер».
- Нажав на правую кнопку мыши, в меню выбирают обозначение «Свойства».
- Домен будет записан в разделе «Полное имя».

У системного администратора есть возможность получить название каждого устройства, входящего в сеть, просматривая Active Directory. В этом параметре отображаются все машины рабочей группы и их имена.
Как ввести компьютер в домен: варианты подключения
Существуют два основных способа ввести компьютер в домен:
- стандартный метод;
- использование специальных программ.
В первом случае подключение выполняют непосредственно с ПК. Для этого необходимо:
- В разделе «Компьютер» выбрать строку «Свойства».
- Нажать на «Изменить параметры» в пункте «Имя компьютера».
- Записать название домена, к которому подключают ПК, в соответствующую строку.
- После нажатия значка «ОК» операцию повторить и ввести пароль.
- После перезагрузки объект станет участником локальной сети.
Другой способ введения в домен доступен только системному администратору. Для этого посредством утилиты NETDOM ему нужно ввести специальную команду на сервере.
Удаленная перезагрузка, блокировка компьютера в домене
Правами на перезагрузку или другие операции обладает администратор домена . Для этого применяют системную команду с ключами:
- Чтобы выключить ПК, набирают shutdown/s.
- Для перезагрузки используют shutdown/r.
- Текущий сеанс завершают набором shutdown/l.
- Для перевода устройства в режим пониженного потребления электроэнергии используют shutdown/h.
- Пользователей можно предупредить о предстоящих изменениях в работе. О блокировке компьютера или другой операции уведомляют в сообщениях – shutdown/r/c «текст».
- Опция /t показывает, спустя какой промежуток времени будет выключен или перезагружен ПК или сервер. Интервал указывают в секундах. Пользователи сумеют сохранить информацию и завершить сеанс – shutdown/s/t 200/c «текст».
- Если для параметра /t указать значение, равное нулю, машина будет выключена немедленно.

Чтобы самостоятельно перезагрузить удаленный компьютер в локальной группе, пользователь должен иметь сетевой доступ.
Как вывести компьютеры из домена
Нередко возникают ситуации, когда устройство надо вывести из домена. Операции доступны для всех версий Windows.
Зачем это нужно
Процедуру вывода ПК проводят, чтобы упорядочить домен. Существует несколько причин:
- Неактивные объекты, которые долго остаются в сети, администратору потом придется искать самостоятельно. Этот процесс бывает долгим.
- Если при обновлении или переустановке сервера не вывести ПК из домена, то в дальнейшем можно получить сообщение, что ресурс в сети уже есть.
- Компьютер не работал в течение месяца или больше. После запуска возможно появление сообщения, что отсутствует сервер для обработки данных.
Вывод ПК из домена предотвращает такие ошибки.
Методы вывода ПК
Существует несколько простых способов вывести компьютер из домена:
- Классический вариант через свойства системы.
- Метод удаления по команде PowerShell.
- Использование утилиты NETDOM.
Хорошо подобранное имя важно и для решения глобальных задач, и для устранения проблем рабочей группы.
Среди пользователей популярны красивые, легкие названия. Такое доменное имя компьютера влияет на состояние бизнеса. Помощь в получении названий премиум-класса оказывает брокер Павел Гросс. Заявка на сайте pavelgross.ru гарантирует подбор адресов с учетом пожеланий клиента. Готовые примеры доменного имени компьютера сделают выбор совсем простым.
Купить доменное имя для сайта можно здесь.
Ищем, где залогинен пользователь [powershell]
Сегодня хочу показать вам простой скрипт PowerShell, который ищет на каких машинах в домене залогинен пользователь.
В целом скрипт в какой то степени повторяет функционал ]]> psloggedon ]]> от sysinternals, но в отличие от этой утилиты – не требует, чтобы на целевом компе был включен удалённый реестр.
Традиционно скрипт доступен ]]> на github ]]> .
Для работы необходимо чтобы в папке со скриптом был размещен psexec, также, если планируется проходиться по всем компьютерам в домене, на машине, где запускается скрипт должен стоять модуль Active Directory для PowerShell.
Кратко опишу логику работы и параметры.
Параметр user – пользователь которого ищем, обязательный параметр.
Comps – можно перечислить через запятую имена компьютеров, на которых необходимо проверить, залогинен ли пользователь.
Maxthreads – максимальное число одновременных потоков – по умолчанию 50, в зависимости от ситуации – можно уменьшить, или наоборот увеличить.
Allsevers – true/false – идёт поиск только по компьютерам, в чьем имени или пути в AD есть server.
Если не заданы allservers и comps – то поиск происходит по всем включённым компьютерам в AD.
Логика работы тут такая – составляется список компов, далее для каждого компа создается поток, вернее задание, сперва проверяется доступность компа, далее идёт попытка подключиться через remote powershell, если psremoting на компе не включен, то идёт подключение при помощи psexec.
к сожалению, из-за механизма работы, так нельзя проверить себя, вернее УЗ от имени которой выполняется скрипт, т.к. фактически – она будет залогинена на всех машинах. Так что, если нужно будет это проверить, нужно и скрипт выполнить от имени другой учётки.
На выходе формируется CSV файл, где указано, залогинен ли пользователь на компе, не залогинен, или произошла какая-то ошибка.
param ( [PARAMETER(Mandatory=$True,Position=0)][String]$user, [PARAMETER(Mandatory=$False,Position=1)][String[]]$comps, [PARAMETER(Mandatory=$False,Position=2)][int]$maxthreads, [PARAMETER(Mandatory=$False,Position=3)][Bool]$AllServers ) import-module activedirectory $sid=get-aduser $user -erroraction stop if ($maxthreads -eq 0) < $maxthreads=50 >if ($comps -eq $null -and $AllServers -ne $True) < $comps=(get-adcomputer -filter -erroraction stop).name > if ($AllServers -eq $True) < $comps=(Get-ADComputer -Filter -erroraction stop | ?).name > $csvPath=".\result.csv" $pstoolsPath="$PSScriptRoot\" $total=$comps.count foreach ($comp in $comps) < $job=< $pstoolsPath=$args[2] if (!(test-path "$($pstoolspath)psexec.exe"))< write-host "psexec not found" return >$path="REGISTRY::HKEY_USERS\$($args[1])" if (Test-Connection $args[0] -Count 2) < try < $test=invoke-command -erroraction stop -computername $args[0] < param($path) Test-Path $path >-ArgumentList $path if ($test -eq $True) < $result="true" >elseif ($test -eq $False) < $result="false" >else < $result="powershell error" >> catch < cd $pstoolsPath $test=(.\psexec.exe -nobanner -accepteula \\$($args[0]) powershell.exe -nologo -NonInteractive -noprofile -command "Test-Path $path") if ($test -eq "True")< $result="true" >elseif ($test -eq "False") < $result="false" >else < $result="error" >> > else < $result="unavailable" >write-host "$($args[0]);$result" > $maxthreads Start-Job -Name $comp -ScriptBlock $job -argumentlist @($comp,$sid.sid,$pstoolsPath) While (@(Get-Job | Where < $_.State -eq "Running" >).Count -gt $maxthreads) < $completed=((Get-Job | Where < $_.State -ne "Running" >).Count) $percentCompleted=($completed*100/$total) Write-Progress -Activity "Search in progress. " -status "$percentCompleted% Completed" -PercentComplete $percentCompleted Start-Sleep -Seconds 3 > > While (@(Get-Job | Where < $_.State -eq "Running" >).Count -gt 0) < $completed=((Get-Job | Where < $_.State -ne "Running" >).Count) $percentCompleted=($completed*100/$total) Write-Progress -Activity "Search in progress. " -status "$percentCompleted% Completed" -PercentComplete $percentCompleted Start-Sleep -Seconds 3 > $final=get-job | receive-job 6>&1 get-job | remove-job "computer;result" | Out-File $csvPath -Encoding utf8 $final | Out-String | Out-File $csvPath -Encoding utf8 -append