Поиск компьютеров по операционной системе в Active Directory

Поиск компьютеров по операционной системе в Active Directory

AD logoДобрый день! Уважаемые читатели и гости одного из крупнейших IT блогов по системному администрированию Pyatilistnik.org. В прошлый раз мы с вами разобрали вопрос, почему у вас отсутствует в системе библиотека vcruntime140.dll и научились ее успешно устанавливать. В сегодняшней публикации я бы вас хотел научить производить поиск в Active Directory по компьютерам с определенной операционной системой. Я расскажу в каких ситуациях вам, это будет полезно.

Постановка задачи

Вы наверняка знаете, что с конца 2019 года компания Microsoft перестает в базовом варианте поддерживать операционные системы Windows Server 2008 R2 и Windows 7, останется только расширенная поддержка для корпоративных пользователей. Вам как системному администратору можете поступить задача, определить сколько у вас таких рабочих станций или серверов, доступны ли они по сети, когда последний раз обращались к контроллеру домена и были изменены их данные.

Второй вариант, когда вам необходимо найти компьютеры с определенными операционными системами, связан с лицензированием, чтобы понять сколько у вас используется.

Решение задачи

Так как у меня доменная инфраструктура и единой точкой получения информации является база Active Directory и это удобно. Получить данные мы можем тремя методами:

  1. Использование LDAP запроса к контроллеру домена
  2. Через оболочку PowerShell
  3. Через SCCM

хочу отметить, что первые два метода доступны всем, а последний, только тем организациям, где внедрен мега продукт System Center Configuration Manager

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

И так получить я хочу компьютеры у которых в качестве операционной системы выступает Windows Server 2008 R2. Для этого откройте оснастку "Active Directory Пользователи и компьютеры". В оснастке ADUC найдите раздел "Сохраненные запросы" и через правый клик по контейнеру, выберите пункт "Создать - Запрос".

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

Задаете понятное имя LDAP запроса и нажимаем кнопку "Запрос".

Создание запроса LDAP

Выбираете "Пользовательский поиск", в поле выбираете "Компьютер - Операционная система".

Поиск компьютеров по операционным системам

В значении пишите Windows Server 2008 и нажимаете кнопку добавить.

поиск компьютеров в Active Directory

Сохраняем настройки, нажимая кнопку "Ок".

Сохранение LDAP запроса

В результате мы получили вот такой LDAP зарос:

(&(objectCategory=computer)(objectClass=computer)(operatingSystem=Windows\20Server\202008\20R2*))

Текст LDAP запроса

На выходе вы получите список компьютеров с нужной вам операционной системой, у меня получилось 86 серверов, большая часть из них имеет статус отключен, об этом говорит стрелка вниз на значке. Так же удобно будет добавить столбец последнего изменения.

Список компьютеров из Active Directory

Получить список компьютеров по ОС из PowerShell

Запускаем оболочку PowerShell, для того чтобы получить список всех компьютеров с нужной операционной системой введите вот такую команду:

Get-ADComputer -Filter { OperatingSystem -Like '*Windows Server 2008*' } -Properties OperatingSystem | Select Name, OperatingSystem | Format-Table -AutoSize

На выходе получите список из имени и версии ОС

Поиск компьютеров AD через PowerShell

Согласитесь, что это не информативно. Хочется, чтобы были данные:

  • Имя
  • Версию операционной системы
  • Дату последнего обращения (LastLogonDate)
  • Дату изменения (Modified)
  • Статус (Включена/Отключена)
  • Сетевая доступность (Отвечает на ping или нет)

Эту задачу я выполню с помощью вот такого кода, который я писал еще пару лет назад:

$Comps = Get-ADComputer -Filter { OperatingSystem -Like '*Windows Server 2008*' } -Properties OperatingSystem, LastLogonDate, Modified | Select Name, OperatingSystem, LastLogonDate, Modified, Enabled | Sort-Object Enabled # | Format-Table -AutoSize

$comps2 = @()

foreach ($comp in $Comps)
{
$comp_info = $null
$comp_info = New-Object psobject -Property @{"Name" = $comp.Name; "Ping" = $(Test-Connection -ComputerName $comp.Name -Quiet -Count 1 -Verbose -ErrorAction SilentlyContinue);`
"OperatingSystem" = $comp.OperatingSystem; "LastLogonDate" = $comp.LastLogonDate; "Modified" = $comp.Modified; "Enabled" = $comp.Enabled}
$comps2 += $comp_info
}

# Скрипт с сайта Pyatilistnik.org

$comps2 | select Name, OperatingSystem, LastLogonDate, Modified, Enabled, Ping | sort Ping | Format-Table -AutoSize

Поиск компьютеров в AD

Если нужно выгрузить в файл, то просто добавьте в конце | Out-File C:\Scripts\Windows-Server.txt или для csv файла | Export-CSV All-Windows.csv -NoTypeInformation -Encoding UTF8

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

Поиск компьютеров в SCCM

SCCM, это мощнейшее средство, которое позволяет вам получать любые данные. Переходим на вкладку "Мониторинг - Отчеты - Операционная система" и выберите там пункт "Компьютеры с Windows Server"

Поиск компьютеров в SCCM

Выбираем коллекцию и нажимаем построить отчет.

Как найти компьютеры по ОС через SCCM

На выходе вы получите отчет по вашим хостам. В принципе данную информацию можно получить и через запрос в SCCM, как это делать смотрите по ссылке.

Результат со списком компьютеров из Active Directory

На этом у меня все. С вами был Иван Семин. автор и создатель IT портала Pyatilistnik.org.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *