Get-ADComputer - Как найти и экспортировать компьютеры AD с помощью PowerShell
Необходимо экспортировать все компьютеры из организационной единицы (OU) или найти компьютер в вашей Active Directory? Или вы хотите подсчитать, сколько у вас компьютеров? Мы можем использовать командлет Get-ADComputer в PowerShell, чтобы быстро извлечь информацию о компьютерах из AD.
Active Directory содержит все компьютеры, которые являются членами нашего домена. Консоль управления отлично подходит для поиска одного компьютера. Но когда вы хотите получить информацию о одном или нескольких компьютерах, нам нужно использовать PowerShell.
В этой статье мы рассмотрим, как использовать командлет Get-ADComputer в PowerShell. Я также приведу вам несколько полезных примеров, когда дело касается поиска и экспорта компьютеров Active Directory. И в качестве бонуса я добавил полный скрипт для экспорта ваших компьютеров Active Directory.
Установите модуль Active Directory
Чтобы иметь возможность использовать командлет Get-ADComputer в PowerShell, вам необходимо установить модуль Active Directory. По умолчанию он установлен на контроллере домена, но на Windows 10 или 11 вам нужно будет его установить.
Вы можете выполнить следующую команду PowerShell в Windows 10 или 11 для установки модуля:
Add-WindowsCapability -online -Name “Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0”Поиск компьютеров с помощью Get-ADComputer в PowerShell
Командлет Get-ADComputer позволяет нам находить объекты компьютеров в Active Directory и извлекать из них информацию. Истинная сила этого командлета заключается в том, что он предлагает различные параметры для поиска этих объектов компьютеров.
У нас есть следующие варианты, когда дело касается поиска объектов:
- Идентичность - Найдите компьютеры по их имени. Это вернет только один компьютер.
- Фильтр – Извлечение нескольких объектов на основе запроса
- LDAPФильтр - Используйте строку запроса LDAP для фильтрации объектов компьютера
- SearchBase – Укажите путь Active Directory (OU) для поиска
- SearchScope – Укажите, насколько глубоко вы хотите производить поиск (базовый уровень, один уровень или полное поддерево)
Параметр идентификации в основном используется, когда вы знаете SAMAccountName компьютера (имя компьютера). Это позволяет вам выбрать один компьютер из Active Directory и просмотреть свойства учетной записи.
Get-ADComputer -identity la-computer-22Это вернет основные свойства компьютера. Мы можем использовать параметр -properties, чтобы получить больше информации о компьютере. Я объясню подробнее о получении различных свойств позже в статье, но если вы хотите увидеть всю возможную информацию о компьютерной учетной записи, используйте следующую команду:
Get-ADComputer -identity la-computer-22 -properties *Получить базу поиска ADComputer
Чаще всего, когда вы хотите извлечь компьютеры из Active Directory, вы хотите уточнить базу поиска по организационным единицам (OU). Для этого мы можем использовать параметр -SearchBase для команды Get-ADComputer. Это позволяет нам указать OU (distinguishedName), где мы хотим провести поиск.
distinguishedName - это полный путь OU, который мы расписываем от OU вверх по дереву до имени домена AD.
Возьмите следующую структуру AD, мы хотим получить все компьютеры из амстердамского сайта:
Базовая строка поиска в данном случае будет следующей:
1 2 3 4 5
"OU=Computers,OU=Amsterdam,OU=Sites,DC=Lazyadmin,DC=NL"
Таким образом, чтобы получить все компьютеры с сайта Амстердама, мы можем использовать следующую команду PowerShell:
Get-ADComputer -Filter * -SearchBase "OU=Computers,OU=Amsterdam,OU=Sites,DC=Lazyadmin,DC=NL" | ftИспользование области поиска
Параметр -SearchBase вернет все компьютеры из указанного и вложенных OU. Используя параметр -SearchScope, мы можем указать, насколько глубоко или не глубоко мы хотим искать в дереве Active Directory.
Скажем, мы хотим получить все компьютеры из Амстердама, кроме компьютеров, которые есть в наличии:
Если мы будем использовать базу поиска, которую мы создали ранее, то будут возвращены все компьютеры, включая те, что на складе, всего 15 компьютеров.
$searchBase = "OU=Computers,OU=Amsterdam,OU=Sites,DC=Lazyadmin,DC=NL"
$computers = Get-ADComputer -Filter * -SearchBase $searchBase
$computers.count # Returns 15Чтобы исключить компьютеры, которые находятся на складе, мы можем использовать параметр SearchScope. Это позволяет ограничить область поиска только текущим уровнем:
$searchBase = "OU=Computers,OU=Amsterdam,OU=Sites,DC=Lazyadmin,DC=NL"
$computers = Get-ADComputer -Filter * -SearchBase $searchBase -SearchScope OneLevel
$computers.count # Returns 12Используя параметр Фильтр
Команда Get-ADComputer также является отличным способом найти один или несколько компьютеров в вашем AD. Хотя объект компьютера не содержит много информации, мы все равно можем использовать несколько свойств для фильтрации.
Давайте посмотрим на несколько часто используемых примеров поиска компьютеров:
Мы можем найти компьютер на основе части имени компьютера с помощью фильтра -like:
Get-ADComputer -Filter "Name -like '*workstation*'" | ftОбратите внимание на подстановочный знак, это значит, что перед и после слова "рабочая станция" может быть что-то.
Получите компьютеры на основе операционной системы
Active Directory также отслеживает все операционные системы на компьютерах. Так что мы также можем получить все компьютеры, на которых работает Windows 10 Pro, например:
Get-ADComputer -Filter "OperatingSystem -eq 'Windows 10 Pro'" | ftМы также можем использовать несколько условий, например, чтобы получить все компьютеры, которые работают на Windows 10 или 11:
Get-ADComputer -Filter "OperatingSystem -eq 'Windows 10 Pro' -or OperatingSystem -eq 'Windows 11 Pro'" | ftПолучить неактивные компьютеры
Хотите узнать, сколько у вас неактивных компьютеров? Мы можем отфильтровать компьютеры AD по дате последнего входа, чтобы извлечь все компьютеры, которые не использовались за последние 90 дней, например.
Для этого нам сначала нужно создать переменную даты, взяв дату с сегодняшнего дня и вычтя из нее 90 дней. Затем мы можем отфильтровать AD компьютеры по lastlogondate:
$date = (Get-Date) - (New-TimeSpan -Days 90)
Get-ADcomputer -Filter 'lastLogondate -lt $date' | ft
Select the canonicalName,lastlogondate and name for a more readable list
Get-ADcomputer -Filter 'lastLogondate -lt $date' -properties canonicalName,lastlogondate | select name,canonicalname,lastlogondate | ft -AutoSizeПолучить все отключенные компьютеры
Еще один полезный пример - получить все отключенные компьютеры из OU:
Get all disabled computers
Get-ADComputer -Filter "Enabled -eq 'False'" | ft
Get only enabled computers
Get-ADComputer -Filter "Enabled -eq 'True'" | ftПолучить свойства компьютера AD
Как упоминалось ранее в статье, объект компьютера не содержит много полезных свойств (по сравнению с объектом пользователя). Но все же есть некоторая полезная информация, которую можно извлечь из объекта.
Не указывая свойства, вы получаете только информацию, связанную с именем компьютера и distinguishedname. Но другие полезные свойства, например, такие как:
- Недопустимый счетчик попыток входа
- Неверное количество паролей
- IPv4Адрес
- Включено
- Последний выход
- Дата последнего входа
- LogonCount
- OperatingSystem
- ВерсияОперационнойСистемы
- WhenCreated
Чтобы получить эту информацию, мы можем использовать параметр -properties:
Get-ADComputer -identity la-computer-22 -Properties IPv4Address,LastLogonDate,OperatingSystem,OperatingSystemVersion,WhenCreatedЭкспортировать компьютер AD в CSV с помощью PowerShell
Экспорт результатов в PowerShell в CSV довольно распространен. Мы все часто используем PowerShell, чтобы получить информацию, а затем обрабатывать ее в Excel. Я написал полное руководство по команде Export-CSV, но я также хочу привести вам пару полезных примеров работы с командой Get-ADComputer.
Чтобы просто экспортировать все объекты компьютеров AD, мы можем использовать следующую команду:
Get-ADComputer -filter * | Export-CSV c:\temp\computers.csv -NoTypeInformationНо, как вы заметите, это не даст действительно тех результатов, которые вы ищете. Это включит все компьютерные объекты, включенные и выключенные, и не даст той информации, которая нам нужна.
Выберите свойства, которые нам нужны
Итак, первый шаг — это указать поля, которые мы действительно хотим экспортировать. Например, если мы хотим экспортировать имя, каноническое имя, операционную систему и дату последнего входа, мы можем использовать следующую команду:
Get-ADComputer -filter * -properties canonicalname,operatingsystem,LastLogonDate | select name,canonicalname,operatingsystem,LastLogonDate | Export-CSV c:\temp\computers.csv -NoTypeInformationЭкспортировать только включенные компьютеры
Если вы хотите экспортировать только включенные компьютеры, вы можете добавить фильтр к командлету:
Get-ADComputer -filter "Enabled -eq 'true'" -properties canonicalname,operatingsystem,LastLogonDate | select name,canonicalname,operatingsystem,LastLogonDate | Export-CSV c:\temp\computers.csv -NoTypeInformationСкрипт для экспорта компьютеров AD в CSV
Я создал скрипт PowerShell, который экспортирует все компьютеры AD в CSV с наиболее необходимыми свойствами.
Когда вы запускаете скрипт, вы указываете несколько параметров:
- Укажите базу поиска (OU), по умолчанию - весь Active Directory
- Получить включенные или выключенные компьютеры или и то, и другое (по умолчанию только включенные)
- Экспортировать путь к файлу CSV (местоположение скрипта по умолчанию)
Скрипт получит все учетные записи пользователей из активного каталога, если вы не укажете searchBase (OU). Также можно указать несколько OU:
.\Get-ADComputers.ps1 -searchBase "OU=computers,OU=Amsterdam,DC=LazyAdmin,DC=Local","OU=computers,OU=Oslo,DC=LazyAdmin,DC=Local" -CSVpath c:\temp\computers.csvСледуйте этим шагам, чтобы экспортировать компьютеры AD с помощью скрипта PowerShell:
- Скачайте полный скрипт Export AD Computers из моего Github
- Откройте PowerShell и перейдите к скрипту
- Запустите скрипт экспорта: Get-ADComputers.ps1
Когда скрипт завершит выполнение, он автоматически откроет Excel для вас.
<#
.SYNOPSIS
Get all AD Computers with properties and export to CSV
.NOTES
Version: 1.2
Author: R. Mens
Creation Date: 24 may 2022
Purpose/Change: Fix enabled/disable filter
#>
param(
[Parameter(
Mandatory = $false,
HelpMessage = "Enter the searchbase between quotes or multiple separated with a comma"
)]
[string[]]$searchBase,
[Parameter(
Mandatory = $false,
HelpMessage = "Get computers that are enabled, disabled or both"
)]
[ValidateSet("true", "false", "both")]
[string]$enabled = "true",
[Parameter(
Mandatory = $false,
HelpMessage = "Enter path to save the CSV file"
)]
[string]$CSVpath
)
Function Get-Computers {
<#
.SYNOPSIS
Get computers from the requested DN
#>
param(
[Parameter(
Mandatory = $true
)]
$dn
)
process{
# Set the properties to retrieve
$properties = @(
'Name',
'CanonicalName',
'OperatingSystem',
'OperatingSystemVersion',
'LastLogonDate',
'LogonCount',
'BadLogonCount',
'IPv4Address',
'Enabled',
'whenCreated'
)
# Get enabled, disabled or both computers
switch ($enabled)
{
"true" {$filter = "enabled -eq 'true'"}
"false" {$filter = "enabled -eq 'false'"}
"both" {$filter = "*"}
}
# Get the computers
Get-ADComputer -Filter $filter -searchBase $dn -Properties $properties | Select-Object $properties
}
}
Function Get-AllADComputers {
<#
.SYNOPSIS
Get all AD computers
#>
process {
Write-Host "Collecting computers" -ForegroundColor Cyan
$computers = @()
# Collect computers
if ($searchBase) {
# Get the requested mailboxes
foreach ($dn in $searchBase) {
Write-Host "- Get computers in $dn" -ForegroundColor Cyan
$computers += Get-Computers -dn $dn
}
}else{
# Get distinguishedName of the domain
$dn = Get-ADDomain | Select-Object -ExpandProperty DistinguishedName
Write-Host "- Get computers in $dn" -ForegroundColor Cyan
$computers += Get-Computers -dn $dn
}
# Loop through all computers
$computers | ForEach-Object {
[pscustomobject]@{
"Name" = $_.Name
"CanonicalName" = $_.CanonicalName
"OS" = $_.OperatingSystem
"OS Version" = $_.OperatingSystemVersion
"Last Logon" = $_.lastLogonDate
"Logon Count" = $_.logonCount
"Bad Logon Count" = $_.BadLogonCount
"IP Address" = $_.IPv4Address
"Mobile" = $_.mobile
"Enabled" = if ($_.Enabled) {"enabled"} else {"disabled"}
"Date created" = $_.whenCreated
}
}
}
}
If ($CSVpath) {
# Get all AD Computers
Get-AllADComputers | Sort-Object Name | Export-CSV -Path $CSVpath -NoTypeInformation -Encoding UTF8
if ((Get-Item $CSVpath).Length -gt 0) {
Write-Host "Report finished and saved in $CSVpath" -ForegroundColor Green
# Open the CSV file
Invoke-Item $CSVpath
}else{
Write-Host "Failed to create report" -ForegroundColor Red
}
}
Else {
Get-AllADComputers | Sort-Object Name
}Завершение
Команда Get-ADComputer действительно полезна, когда дело касается извлечения компьютеров из Active Directory. Использование параметра searchbase позволяет вам быстро выбрать нужный компьютер из указанного OU.
Чтобы экспортировать компьютеры AD в CSV, вы можете попробовать скрипт. Вы можете легко изменить свойства, которые он извлекает, под свои нужды.
Если у вас есть вопросы, просто оставьте комментарий ниже.



