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


06 апреля 2020


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

Так же как и с получением списка пользователей AD с Get-ADUser с помощью Powershell мы можем вернуть список компьютеров. Этот список может быть отфильтрован исключая или включая отключенные учетные записи, по-определенному OU, экспортированы в CSV и многое другое. Эти примеры, а так же множество других, вы можете увидеть в статье ниже.

 

Получение компьютеров

Команда, которая вернет список всех компьютеров в домене следующая:

Get-ADComputer -Filter *

Получение списка компьютеров домена в Powershell

Команда точно выполнится на домен контроллере, так как все поддерживаемые серверные версии ОС устанавливают нужный модуль Powershell вместе с Active Directory (если вы только специально не отключали эту возможность). Если вы планируете выполнять команду с клиента на Windows 7 и выше, то такой модуль устанавливается вместе с RSAT (Remote Server Administration Tools). В отдельном случае может понадобится импортировать этот модуль следующей командой:

Import-Module ActiveDirectory

Вы так же можете проверить, что этот модуль у вас установлен следующей командой:

Get-Module -Name ActiveDirectory

Проверка модуля Powershell Active Directory

В остальных случаях стоит смотреть на явные запреты на выполнение скриптов Powershell и чтения Active Directory.

Что бы вернуть данные по одному пользователю используется ключ Identity:

Get-ADComputer -Identity "AD1"

Получение компьютера домена в Powershell

Параметр Filter является обязательным. Вы можете вернуть дополнительные данные используя Properties:

Get-ADComputer -Filter * -Properties *

Получение всех свойств из списка компьютеров домена в Powershell

 

Фильтрация вывода

У нас есть базовые свойства, которые фильтруются с помощью Filter. Это:

  • DistinguishedName
  • Enabled
  • ObjectClass
  • ObjectGUID
  • SamAccountName
  • SID
  • UserPrincipalName

И ряд свойств, которые возвращаются с параметром Properties. Их можно фильтровать через дополнительные условия (конвейер, where-object, циклы). Имена этих свойств можно вернуть так:

Get-ADComputer -Filter * -Properties * | Get-Member -MemberType Properties | select name

Свойства объекта компьютера в Powershell
 

Использование Filter

Если вы планируете получить информацию по определенному доменному компьютеру, то вам нужно добавить условие. В примере ниже я возвращаю информацию только по компьютеру у которого имя равно "AD1":

Get-ADComputer -Filter {Name -eq "AD1"} -Properties *

Filter у команды Get-ADComputer в Powershell

Если нужно найти только компьютеры, которые содержат в имени определенные значения, то нужно использовать -like вместо -eq . В моем примере я ищу все компьютеры содержащие в имени "CL" (регистр не учитывается).

Get-ADComputer -Filter {Name -like "*CL*"} -Properties *

Использование Filter у команды Get-ADComputer в Powershell

Знаки * говорят, что в этих местах может быть еще текст. Такое написание "C*L" соответствовало бы логике: строка начинается с буквы "C", затем может быть еще текст завершающийся на "L".
 

Использование Properties

Свойства возвращаемые через ключ Properties можно фильтровать двумя способами.

Первый - указывать их явно. Например вы хотите вернуть список с датами создания учетных записей компьютеров домена, которые хранит свойство "Created". Это можно сделать так:

Get-ADComputer -Filter * -Properties Created

Дата создания объекта компьютера в Powershell 
Указать больше свойств можно через запятую. Например:

Get-ADComputer -Filter * -Properties Created,CN,CodePage

Так же можно фильтровать через команду where-object. На примере ниже я получаю компьютеры со всеми свойствами, но созданные до 31 декабря 2019 года:

Get-ADComputer -Filter * -Properties * | `
Where-Object -Property Created -LT (Get-Date -Year 2019 -Month 12 -Day 31)

Фильтрация с командой Get-ADComputer Powershell

Ограничить вывод определенными свойствами можно через Select:

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

Форматирования вывода команды Get-ADComputer в Powershell
 

Получение включенных и отключенных учетных записей

Используя свойства Enabled можно вернуть учетные записи активных и деактивированных записей. Так будут возвращены отключенные учетные записи:

Get-ADComputer -Filter {Enabled -eq $False}

Получение списка отключенных компьютеров Powershell

 

Получение компьютеров из определенных OU

Для работы с организационными единицами есть параметр -SearchBase. Мой домен контроллер называется "domain.local", а организационная единица "Moscow", следовательно, заполненный параметр будет выглядеть так:

-SearchBase "OU=Moscow,DC=domain,DC=local"

Вместе с командой это получится так:

Get-ADComputer -Filter * -SearchBase "OU=Moscow,DC=Domain,DC=local"

Получение доменных компьютеров с определенной OU в Powershell

Если у вас несколько доменов или OU, которые нужно посмотреть, можно использовать циклы и массивы:

# Организационные единицы
$ous = @('Moscow',
           'SPB')
# Домен
$domain = 'DC=domain,DC=local'

foreach ($ou in $ous){
    $ou = "OU=$ou,$domain"
    Get-ADComputer -Filter * -SearchBase $ou
}

Получение доменных компьютеров с определенной OU в Powershell 

 

Ограничение вывода

Если у вас очень большой AD, то вывод всех компьютеров может быть долгим. Вы можете изменить это ограничив вывод с помощью ResultSetSize. Так я выведу только одну запись:

Get-ADComputer -Filter * -ResultSetSize 1

Ограничение вывода команды Get-ADUser в Powershell

 

Эскорт в CSV

Любой выведенный результат команды Get-ADComputer мы можем экспортировать в CSV. Для этого у нас есть командлет Export-CSV. На примере ниже я выгружаю информацию обо всех компьютеров домена в файл "C:\adcomputers.csv"

Get-ADComputer -Filter * -Properties * | Export-CSV -Path "C:\ADComputers.csv" -NoTypeInformation

...

Теги: #powershell #ad


Каналы
Telegram FixMyPc Telegram Лента FixMyPC RSS Rss
Популярные тэги
О блоге
Этот блог представляет собой конспекты выученного материала, приобретённого опыта и лучшие практики в системном администрировании и программировании.