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

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

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

В остальных случаях стоит смотреть на явные запреты на выполнение скриптов Powershell и чтения Active Directory.
Что бы вернуть данные по одному пользователю используется ключ Identity:
1
|
Get-ADComputer -Identity "AD1"
|

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

Фильтрация вывода
У нас есть базовые свойства, которые фильтруются с помощью Filter. Это:
- DistinguishedName
- Enabled
- ObjectClass
- ObjectGUID
- SamAccountName
- SID
- UserPrincipalName
И ряд свойств, которые возвращаются с параметром Properties. Их можно фильтровать через дополнительные условия (конвейер, where-object, циклы). Имена этих свойств можно вернуть так:
1
|
Get-ADComputer -Filter * -Properties * | Get-Member -MemberType Properties | select name
|

Использование Filter
Если вы планируете получить информацию по определенному доменному компьютеру, то вам нужно добавить условие. В примере ниже я возвращаю информацию только по компьютеру у которого имя равно «AD1»:
1
|
Get-ADComputer -Filter {Name -eq "AD1"} -Properties *
|

Если нужно найти только компьютеры, которые содержат в имени определенные значения, то нужно использовать -like вместо -eq . В моем примере я ищу все компьютеры содержащие в имени «CL» (регистр не учитывается).
1
|
Get-ADComputer -Filter {Name -like "*CL*"} -Properties *
|

Знаки * говорят, что в этих местах может быть еще текст. Такое написание «C*L» соответствовало бы логике: строка начинается с буквы «C», затем может быть еще текст завершающийся на «L».
Использование Properties
Свойства возвращаемые через ключ Properties можно фильтровать двумя способами.
Первый — указывать их явно. Например вы хотите вернуть список с датами создания учетных записей компьютеров домена, которые хранит свойство «Created». Это можно сделать так:
1
|
Get-ADComputer -Filter * -Properties Created
|
Указать больше свойств можно через запятую. Например:
1
|
Get-ADComputer -Filter * -Properties Created,CN,CodePage
|
Так же можно фильтровать через команду where-object. На примере ниже я получаю компьютеры со всеми свойствами, но созданные до 31 декабря 2019 года:
1
2
|
Get-ADComputer -Filter * -Properties * | `
Where-Object -Property Created -LT (Get-Date -Year 2019 -Month 12 -Day 31)
|

Ограничить вывод определенными свойствами можно через Select:
1
2
3
4
|
$date = (Get-Date -Year 2019 -Month 12 -Day 31)
Get-ADComputer -Filter * -Properties * | `
Where-Object -Property Created -LT $date| `
select Name, Created | ft
|
Получение включенных и отключенных учетных записей
Используя свойства Enabled можно вернуть учетные записи активных и деактивированных записей. Так будут возвращены отключенные учетные записи:
1
|
Get-ADComputer -Filter {Enabled -eq $False}
|

Получение компьютеров из определенных OU
Для работы с организационными единицами есть параметр -SearchBase. Мой домен контроллер называется «domain.local», а организационная единица «Moscow», следовательно, заполненный параметр будет выглядеть так:
1
|
-SearchBase "OU=Moscow,DC=domain,DC=local"
|
Вместе с командой это получится так:
1
|
Get-ADComputer -Filter * -SearchBase "OU=Moscow,DC=Domain,DC=local"
|

Если у вас несколько доменов или OU, которые нужно посмотреть, можно использовать циклы и массивы:
1
2
3
4
5
6
7
8
9
10
|
# Организационные единицы
$ous = @('Moscow',
'SPB')
# Домен
$domain = 'DC=domain,DC=local'
foreach ($ou in $ous){
$ou = "OU=$ou,$domain"
Get-ADComputer -Filter * -SearchBase $ou
}
|

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

Эскорт в CSV
Любой выведенный результат команды Get-ADComputer мы можем экспортировать в CSV. Для этого у нас есть командлет Export-CSV. На примере ниже я выгружаю информацию обо всех компьютеров домена в файл «C:\adcomputers.csv»
1
|
Get-ADComputer -Filter * -Properties * | Export-CSV -Path "C:\ADComputers.csv" -NoTypeInformation
|
…