Поиск принтеров в Active Directory (AD) — типичная задача для системных администраторов, особенно в крупных сетях с десятками или сотнями устройств. Чаще всего требуется найти принтер по имени, IP-адресу, модели или расположению, чтобы подключить его к рабочей станции, изменить настройки или устранить неполадки. В отличие от поиска пользователей или компьютеров, принтеры в AD хранятся в отдельном контейнере CN=Printers, и работать с ними можно через графические оснастки, PowerShell или командную строку.

В этой статье разберём все актуальные способы поиска — от простых (через Управление печати) до продвинутых (скрипты на LDAP-запросы). Особое внимание уделим поиску принтеров по неполным данным, когда известно только часть имени или IP-диапазон. Все команды протестированы на Windows Server 2019/2022 и Windows 10/11 Pro с установленными инструментами RSAT (Remote Server Administration Tools).

1. Поиск принтера через оснастку «Управление печати»

Самый визуальный способ — использовать встроенную оснастку Управление печати (Print Management). Она доступна на серверах печати и рабочих станциях с установленными RSAT. Интерфейс интуитивен, но имеет ограничения: например, не поддерживает сложные фильтры по нескольким критериям одновременно.

Чтобы открыть оснастку:

  • 🖥️ Нажмите Win + R, введите printmanagement.msc и нажмите Enter.
  • 🔍 В левой панели разверните Серверы печати → [Имя_вашего_сервера] → Принтеры.
  • 📝 Для поиска используйте поле фильтра в правой верхней части окна (работает только по имени принтера).

Если принтер не отображается, проверьте:

  • 🔌 Подключение к домену (оснастка работает только в доменной среде).
  • 🛡️ Права пользователя (нужны права Print Operators или администратора).
  • 📡 Сетевую доступность сервера печати (проверьте ping [имя_сервера]).
⚠️ Внимание: Оснастка Управление печати показывает только принтеры, опубликованные в AD. Если принтер добавлен локально на сервере, но не опубликован, его не будет видно в этом списке.
📊 Какой инструмент вы чаще используете для управления принтерами?
Графические оснастки (Print Management)
PowerShell
Командная строка (printui.dll)
Специализированное ПО (например, PrinterLogic)

2. Поиск принтера через PowerShell

PowerShell — самый гибкий инструмент для работы с принтерами в AD. С его помощью можно искать по любым атрибутам, экспортировать списки в CSV и автоматизировать задачи. Основные cmdlet’ы для работы:

  • Get-Printer — показывает локальные и сетевые принтеры.
  • Get-ADObject — ищет объекты в AD по фильтрам.
  • Get-PrintConfiguration — выводит детали конфигурации принтера.

Примеры команд для поиска:

Поиск по имени (частичному совпадению):

Get-ADObject -Filter {Name -like"HP_LaserJet"} -SearchBase"CN=Printers,DC=domain,DC=local" | Select-Object Name, DistinguishedName

Поиск по IP-адресу:

Get-Printer | Where-Object {$_.PortName -match"192.168.1."} | Select-Object Name, PortName, DriverName

Экспорт всех принтеров в CSV:

Get-Printer | Export-Csv -Path"C:\Temp\Printers_List.csv" -NoTypeInformation -Encoding UTF8
⚠️ Внимание: Команды Get-Printer и Get-ADObject возвращают разные наборы данных. Первая работает с локально установленными принтерами, вторая — с объектами в AD. Для полного списка используйте обе.

Установите модуль ActiveDirectory (Install-WindowsFeature -Name RSAT-AD-PowerShell)

Запустите PowerShell от имени администратора

Проверьте подключение к домену (Test-ComputerSecureChannel)

Уточните DistinguishedName контейнера принтеров (можно найти через ADSI Edit)-->

3. Поиск через командную строку (printui.dll)

Утилита printui.dll — классический инструмент для управления принтерами из командной строки. Она позволяет искать принтеры по серверу, драйверу или имени, но требует знания синтаксиса. Главное преимущество — работает на всех версиях Windows без дополнительных модулей.

Базовый синтаксис для поиска:

rundll32 printui.dll,PrintUIEntry /ga /n\\[Имя_сервера]\[Имя_принтера]

Чтобы вывести список всех принтеров на сервере:

rundll32 printui.dll,PrintUIEntry /ga /c\\[Имя_сервера]

Для поиска по драйверу (например, Xerox Global Print Driver):

rundll32 printui.dll,PrintUIEntry /ge /f"C:\Temp\Printers.txt" /c\\[Имя_сервера]

Эта команда экспортирует список в файл Printers.txt, который можно открыть в Блокноте и отфильтровать по названию драйвера.

Команда Описание Пример
/ga Добавляет принтер (или выводит информацию, если принтер уже существует) rundll32 printui.dll,PrintUIEntry /ga /n\\SRV-PRINT\HP_Color
/ge Экспортирует список принтеров в файл rundll32 printui.dll,PrintUIEntry /ge /f"C:\list.txt"
/c\\[server] Указывает сервер печати rundll32 printui.dll,PrintUIEntry /ge /c\\DC01
/n Имя принтера (для точного поиска) /n\\SRV-PRINT\Xerox_WorkCentre
💡

Если команда printui.dll не работает, проверьте регистр букв в имени принтера. В некоторых версиях Windows поиск чувствителен к регистру!

4. Поиск принтера через ADSI Edit

Утилита ADSI Edit (Active Directory Service Interfaces Editor) позволяет просматривать и редактировать объекты AD вручную. Это полезно, если принтер не отображается в стандартных оснастках, но точно опубликован в домене. Инструмент входит в состав RSAT и доступен на серверах.

Инструкция по поиску:

  1. Откройте ADSI Edit (adsiedit.msc).
  2. Подключитесь к контексту именования Default naming context.
  3. Перейдите по пути: DC=[ваш_домен],DC=local → CN=System → CN=Printers.
  4. В правой панели отобразятся все принтеры, опубликованные в AD. Используйте сортировку по столбцу Name для удобства.

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

  • 📌 portName — IP-адрес или имя порта.
  • 🖨️ driverName — модель драйвера.
  • 📍 location — физическое расположение (если заполнено).
  • 🔗 printShareName — сетевое имя.
⚠️ Внимание: Изменение атрибутов принтера через ADSI Edit может нарушить его работу. Рекомендуется использовать этот инструмент только для просмотра данных.

5. Поиск принтера по IP-адресу или MAC

Если известен IP-адрес или MAC-адрес принтера, но не известно его имя в AD, можно использовать комбинацию инструментов: PowerShell для сканирования портов и LDAP-запросы для сопоставления с объектами в домене.

Шаг 1. Найдите принтер в сети по IP:

Test-Connection 192.168.1.100 -Count 1

Get-Printer | Where-Object {$_.PortName -eq"192.168.1.100:9100"}

Шаг 2. Сопоставьте IP с объектом в AD:

$IP ="192.168.1.100"

Get-ADObject -Filter {portName -like"$IP"} -SearchBase"CN=Printers,DC=domain,DC=local" | Select-Object Name, portName

Если принтер не найден, проверьте:

  • 🔌 Правильность IP-адреса (используйте arp -a для проверки MAC).
  • 📡 Настройки порта на сервере печати (порт должен быть типа Standard TCP/IP Port).
  • 🔄 Кэш DNS (очистите его командой ipconfig /flushdns).
Как найти MAC-адрес принтера по IP?

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

snmpwalk -v 2c -c public 192.168.1.100 1.3.6.1.2.1.2.2.1.6

Для принтеров без SNMP подключитесь к веб-интерфейсу (обычно по адресу http://[IP_принтера]) и найдите MAC в разделе"Network" или"Status".

6. Продвинутый поиск: LDAP-запросы

Для сложных сценариев (например, поиск принтеров по модели, расположению или драйверу) используйте LDAP-запросы. Их можно выполнять через PowerShell, AD Explorer или LDP.exe.

Пример 1. Поиск по модели драйвера (HP Universal Printing PCL 6):

$Searcher = New-Object DirectoryServices.DirectorySearcher

$Searcher.SearchRoot ="LDAP://CN=Printers,DC=domain,DC=local"

$Searcher.Filter ="(driverName=HP Universal Printing PCL 6)"

$Results = $Searcher.FindAll

$Results | ForEach-Object {$_.Properties.name}

Пример 2. Поиск по расположению (атрибут location):

$Searcher.Filter ="(location=3 этаж)"

$Results = $Searcher.FindAll

$Results | Select-Object @{Name="Printer";Expression={$_.Properties.name}},@{Name="Location";Expression={$_.Properties.location}}

LDAP-запросы поддерживают логические операторы (& — И, | — ИЛИ), что позволяет комбинировать критерии:

$Searcher.Filter ="(&(name=Color)(location=офис))"
💡

LDAP-запросы — самый мощный инструмент для поиска принтеров в AD, но требует знания синтаксиса фильтров. Для упрощения используйте конструкторы запросов, например, в утилите AD Explorer от Sysinternals.

7. Автоматизация: скрипт для поиска принтеров по нескольким критериям

Если приходится часто искать принтеры, имеет смысл создать PowerShell-скрипт с гибкими параметрами. Ниже пример скрипта, который ищет принтеры по имени, IP, модели или расположению и экспортирует результат в CSV:

[CmdletBinding]

param (

[string]$Name,

[string]$IP,

[string]$Driver,

[string]$Location,

[string]$OutputFile ="C:\Temp\Printers_Search_Results.csv"

)

Подключаем модуль ActiveDirectory

Import-Module ActiveDirectory

Формируем фильтр

$Filter ="(|"

if ($Name) {$Filter +="(name=$Name)"}

if ($IP) {$Filter +="(portName=$IP)"}

if ($Driver) {$Filter +="(driverName=$Driver)"}

if ($Location) {$Filter +="(location=$Location)"}

$Filter +=")"

Выполняем поиск

$Searcher = New-Object DirectoryServices.DirectorySearcher

$Searcher.SearchRoot ="LDAP://CN=Printers,DC=domain,DC=local"

$Searcher.Filter = $Filter

$Results = $Searcher.FindAll

Экспортируем результаты

$Output = @

foreach ($Result in $Results) {

$Printer = [PSCustomObject]@{

Name = $Result.Properties.name

Port = $Result.Properties.portname

Driver = $Result.Properties.drivername

Location = $Result.Properties.location

Server = $Result.Properties.servername

Shared = $Result.Properties.printername

}

$Output += $Printer

}

$Output | Export-Csv -Path $OutputFile -NoTypeInformation -Encoding UTF8 -Delimiter";"

Write-Host"Результаты сохранены в $OutputFile" -ForegroundColor Green

Чтобы запустить скрипт, сохраните его как Search-Printers.ps1 и выполните:

.\Search-Printers.ps1 -Name"Xerox" -Location"3 этаж" -OutputFile"C:\Reports\Xerox_Printers.csv"
⚠️ Внимание: Скрипт требует прав на чтение объектов в AD. Если при запуске возникает ошибка Access Denied, запустите PowerShell от имени администратора домена.

Частые ошибки и их решения

При поиске принтеров в AD администраторы сталкиваются с типичными проблемами. Вот самые распространённые и способы их решения:

Ошибка Возможная причина Решение
Принтер не найден, хотя существует Притер не опубликован в AD или опубликован в другом контейнере Проверьте публикацию через Управление печати → Принтеры → [ПКМ по принтеру] → Список в Active Directory
Ошибка Get-ADObject: Не удаётся найти путь Неверный SearchBase или отсутствует подключение к домену Уточните DistinguishedName контейнера принтеров командой (Get-ADDomain).PrintersContainer
Команда Get-Printer возвращает пустой список Локальные принтеры не установлены, или нет прав на просмотр сетевых принтеров Запустите PowerShell от имени администратора или укажите сервер явно: Get-Printer -ComputerName SRV-PRINT
Принтер найден, но не подключается Проблемы с драйвером, портом или разрешениями Проверьте драйвер (Get-PrinterDriver) и порт (Get-PrinterPort), затем переустановите принтер

Если принтер найден, но не работает, проверьте:

  • 🔌 Сетевое подключение: ping [IP_принтера] и Test-NetConnection [IP_принтера] -Port 9100.
  • 🖨️ Драйвер: Обновите его через Управление печати → Драйверы.
  • 🔒 Разрешения: Убедитесь, что у пользователя есть права на печать (Print).

FAQ: Ответы на частые вопросы

Как найти принтер, если не знаю его имени, но знаю, что он подключён к серверу SRV-PRINT?

Используйте команду:

Get-Printer -ComputerName SRV-PRINT | Select-Object Name, PortName, DriverName

Если принтер опубликован в AD, дополнительно проверьте:

Get-ADObject -Filter * -SearchBase"CN=Printers,DC=domain,DC=local" | Where-Object {$_.servername -like"SRV-PRINT"} | Select-Object Name
Можно ли искать принтеры по серийному номеру?

В стандартных атрибутах AD серийный номер принтера (serialNumber) обычно не хранится. Однако некоторые производители (например, Xerox или Ricoh) добавляют его в поле description или comment. Попробуйте поиск:

Get-ADObject -Filter {description -like"SN:12345"} -SearchBase"CN=Printers,DC=domain,DC=local"

Если это не сработало, серийный номер можно найти:

  • В веб-интерфейсе принтера (раздел Status или Configuration).
  • Через SNMP-запрос (если принтер поддерживает протокол).
Как экспортировать список всех принтеров в домене с их IP-адресами?

Используйте этот скрипт:

Get-ADObject -Filter * -SearchBase"CN=Printers,DC=domain,DC=local" |

Select-Object Name, @{Name="IP";Expression={($_.portName -split":")[0]}} |

Export-Csv -Path"C:\Temp\All_Printers_IP.csv" -NoTypeInformation -Delimiter";"

Если нужно добавить дополнительные поля (например, драйвер или расположение), расширьте команду:

Select-Object Name, @{Name="IP";Expression={($_.portName -split":")[0]}}, driverName, location
Почему команда Get-ADObject не находит принтеры, а Get-Printer — находит?

Это происходит потому, что:

  • Get-Printer показывает принтеры, установленные на локальном компьютере или указанном сервере (включая неопубликованные в AD).
  • Get-ADObject ищет только объекты, опубликованные в контейнере CN=Printers.

Чтобы увидеть все принтеры, комбинируйте оба метода или проверьте публикацию принтера в AD через Управление печати.

Как найти принтер по пользователю, который им пользуется?

Прямого способа нет, но можно использовать косвенные методы:

  1. Проверьте логи печати на сервере:
    Get-WinEvent -LogName"Microsoft-Windows-PrintService/Admin" | Where-Object {$_.Message -like"[имя_пользователя]"}
  2. Используйте PowerShell для поиска сессий печати:
    Get-Printer | ForEach-Object {
    

    $Jobs = Get-PrintJob -PrinterName $_.Name -UserName"[имя_пользователя]"

    if ($Jobs) { Write-Host"Принтер: $($_.Name)" }

    }

  3. Проверьте подключённые принтеры на компьютере пользователя:
    Get-Printer -ComputerName [имя_ПК_пользователя]

Если принтер сетевой, но не опубликован в AD, найдите его по IP в логах маршрутизатора или DHCP-сервера.