Командлет Get-ADComputer из модуля Active Directory для PowerShell — мощный инструмент для получения информации о компьютерах в домене Active Directory (AD). Он позволяет администраторам находить, фильтровать и управлять учетными записями компьютеров по различным критериям, таким как время последней активности или версия ОС. В этой статье мы разберем, как использовать Get-ADComputer для поиска неактивных компьютеров, их блокировки и выполнения других задач, с примерами и техническими деталями.
Подготовка к работе с Get-ADComputer
Для работы с Get-ADComputer требуется модуль Active Directory. Убедитесь, что он установлен:
1. На сервере Windows Server 2012 и выше модуль подключается автоматически при установке компонента Remote Server Administration Tools (RSAT) -> Role Administration Tools -> AD DS and AD LDS Tools -> Active Directory module for Windows PowerShell.
2. На клиентских системах Windows 10/11 установите RSAT и включите модуль командой:
Add-WindowsCapability –Online –Name "Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0"
3. Импортируйте модуль:
Import-Module ActiveDirectory
Права администратора домена не требуются — достаточно членства в группе Authenticated Users или Domain Users.
Справка о параметрах командлета Get-ADComputer вызывается стандартно с помощью Get-Help:
Get-Help Get-ADComputer
Получение информации о компьютере
Для получения базовых данных об учетной записи компьютера используйте параметр -Identity:
Get-ADComputer -Identity SRV-DB01
Эта команда возвращает базовые атрибуты, такие как Name, DistinguishedName и SID. Чтобы получить все атрибуты, добавьте параметр -Properties *:
Get-ADComputer -Identity SRV-DB01 -Properties *
Этот список атрибутов компьютера также доступен в графической консоли Active Directory Users and Computers ( dsa.msc ) на вкладке редактора атрибутов.
Для просмотра списка всех доступных свойств объекта Computer используйте:
Get-ADComputer -Filter * -Properties * | Get-Member
Чтобы вывести только нужные атрибуты, например, Name и LastLogonDate:
Get-ADComputer -Identity SRV-DB01 -Properties * | Format-Table Name, LastLogonDate -AutoSize
Поиск всех компьютеров в домене
Для получения данных о всех компьютерах замените -Identity на -Filter *:
Get-ADComputer -Filter * -Properties * | Format-Table Name, LastLogonDate -AutoSize
Для ограничения поиска определенной организационной единицей (OU) используйте -SearchBase:
Get-ADComputer -SearchBase "OU=Moscow,DC=winitpro,DC=loc" -Filter * -Properties * | Format-Table Name, LastLogonDate -AutoSize
Сортировка результатов
Отсортируйте компьютеры по времени последней активности:
Get-ADComputer -Filter * -Properties * | Sort-Object LastLogonDate | Format-Table Name, LastLogonDate -AutoSize
Поиск и блокировка неактивных компьютеров
Для поиска компьютеров, не регистрировавшихся в домене более 120 дней:
1. Задайте дату, отстоящую на 120 дней назад:
$date_with_offset = (Get-Date).AddDays(-120)
2. Найдите неактивные компьютеры:
Get-ADComputer -Properties LastLogonDate -Filter {LastLogonDate -lt $date_with_offset} | Sort-Object LastLogonDate | Format-Table Name, LastLogonDate -AutoSize
3. Протестируйте блокировку с параметром -WhatIf:
Get-ADComputer -Properties LastLogonDate -Filter {LastLogonDate -lt $date_with_offset} | Set-ADComputer -Enabled $false -WhatIf
4. Выполните блокировку:
Get-ADComputer -Properties LastLogonDate -Filter {LastLogonDate -lt $date_with_offset} | Set-ADComputer -Enabled $false
Альтернативно используйте Disable-ADAccount:
Get-ADComputer -Properties LastLogonDate -Filter {LastLogonDate -lt $date_with_offset} | Disable-ADAccount
Использование фильтров в Get-ADComputer
Параметр -Filter позволяет искать компьютеры по базовым атрибутам с использованием логических операторов (-eq, -like, -and, -or).
— Подсчет активных компьютеров:
(Get-ADComputer -Filter {Enabled -eq "true"}).Count
— Подсчет серверов с Windows Server:
(Get-ADComputer -Filter {Enabled -eq "true" -and OperatingSystem -like "*Windows Server*"}).Count
— Поиск компьютеров в OU с именами, начинающимися на «BuhPC»:
Get-ADComputer -Filter {Name -like "BuhPC*"} -SearchBase "OU=Moscow,DC=winitpro,DC=loc" -Properties IPv4Address | Format-Table Name, DNSHostName, IPv4Address -AutoSize
Для рекурсивного поиска во вложенных OU добавьте -SearchScope 2:
Get-ADComputer -Filter {Name -like "BuhPC*"} -SearchBase "OU=Moscow,DC=winitpro,DC=loc" -SearchScope 2 -Properties IPv4Address | Format-Table Name, DNSHostName, IPv4Address -AutoSize
— Список серверов с атрибутами ОС и IP:
Get-ADComputer -Filter 'OperatingSystem -like "*Windows Server*" -and Enabled -eq "true"' -Properties Name, OperatingSystem, OperatingSystemVersion, OperatingSystemServicePack, IPv4Address | Sort-Object OperatingSystem | Format-Table Name, OperatingSystem, OperatingSystemVersion, OperatingSystemServicePack, IPv4Address -AutoSize
Дополнительные примеры использования Get-ADComputer
— Поиск с использованием LDAP-фильтра:
Get-ADComputer -LDAPFilter "(name=*db*)" | Format-Table
— Поиск заблокированных компьютеров в OU:
Get-ADComputer -Filter * -SearchBase "OU=Computers,DC=winitpro,DC=loc" | Where-Object {$_.Enabled -eq $false}
— Удаление компьютеров, неактивных более 6 месяцев:
Get-ADComputer -Properties LastLogonDate -Filter * | Where-Object {$_.LastLogonDate -lt (Get-Date).AddMonths(-6)} | Remove-ADComputer
— Проверка времени последней смены пароля:
Get-ADComputer -Identity PC123456 -Properties PasswordLastSet
— Экспорт списка серверов Windows Server 2019 в текстовый файл:
Get-ADComputer -Filter {OperatingSystem -like "*Windows Server 2019*"} -Properties OperatingSystem | Select-Object DNSHostName, OperatingSystem | Format-Table -AutoSize | Out-File C:\Scripts\server_system.txt
— Экспорт в CSV:
Get-ADComputer -Filter * -Properties * | Select-Object Name, OperatingSystem, OperatingSystemServicePack | Export-CSV C:\Scripts\All-Windows.csv -NoTypeInformation -Encoding UTF8
— Создание HTML-отчета:
Get-ADComputer -Filter {OperatingSystem -like "*Windows Server 2012*"} -Properties * | Select-Object Name, OperatingSystem | ConvertTo-Html | Out-File C:\Scripts\ad_computer.html
— Получение серийных номеров серверов через WMI:
Get-ADComputer -Filter 'OperatingSystem -like "*Windows Server*" -and Enabled -eq "true"' | Select-Object Name | ForEach-Object {Get-CimInstance Win32_Bios -ComputerName $_.Name -ErrorAction SilentlyContinue | Select-Object PSComputerName, SerialNumber}
— Получение информации о моделях серверов:
$Computers = Get-ADComputer -Filter {OperatingSystem -like "*Windows Server*"}
ForEach ($Computer in $Computers) {
$Hostname = $Computer.Name
$ComputerInfo = Get-WmiObject -ComputerName $Hostname Win32_ComputerSystem
$Manufacturer = $ComputerInfo.Manufacturer
$Model = $ComputerInfo.Model
Write-Host "Name: $Hostname"
Write-Host "Manufacturer: $Manufacturer"
Write-Host "Model: $Model"
Write-Host " "
"$Hostname;$Manufacturer;$Model" | Add-Content -Path "C:\Scripts\ServersInfo.txt"
}
— Обновление групповых политик на серверах в OU:
Get-ADComputer -SearchBase "OU=Servers,DC=winitpro,DC=loc" -Filter * | ForEach-Object {Invoke-Command -ComputerName $_.Name -ScriptBlock {gpupdate /force}}
Использование в логон-скриптах
Get-ADComputer можно комбинировать с логон-скриптами для записи данных в атрибуты AD. Например, для мониторинга состояния службы SCCM:
1. Логон-скрипт записывает состояние службы ccmexec в атрибут extensionAttribute10:
Set-ADComputer -Identity $env:COMPUTERNAME -Add @{extensionAttribute10="SCCM Agent:Running"}
2. Поиск компьютеров с неработающим агентом SCCM:
Get-ADComputer -Filter {extensionAttribute10 -ne "SCCM Agent:Running"} -SearchBase "OU=Computers,OU=MSK,DC=winitpro,DC=ru" -Properties DNSHostName, extensionAttribute10, LastLogon продолжалDate | Select-Object DNSHostName, extensionAttribute10, LastLogonDate
Командлет Get-ADComputer предоставляет гибкие возможности для управления компьютерами в Active Directory. Он позволяет находить неактивные устройства, экспортировать данные в различные форматы и автоматизировать задачи, такие как блокировка учетных записей или обновление политик. Использование фильтров, LDAP-запросов и интеграция с WMI делают его незаменимым инструментом для системных администраторов.