Поиск принтеров в 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. Если принтер добавлен локально на сервере, но не опубликован, его не будет видно в этом списке.
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 и доступен на серверах.
Инструкция по поиску:
- Откройте
ADSI Edit(adsiedit.msc). - Подключитесь к контексту именования
Default naming context. - Перейдите по пути:
DC=[ваш_домен],DC=local → CN=System → CN=Printers. - В правой панели отобразятся все принтеры, опубликованные в 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 через Управление печати.
Как найти принтер по пользователю, который им пользуется?
Прямого способа нет, но можно использовать косвенные методы:
- Проверьте логи печати на сервере:
Get-WinEvent -LogName"Microsoft-Windows-PrintService/Admin" | Where-Object {$_.Message -like"[имя_пользователя]"} - Используйте PowerShell для поиска сессий печати:
Get-Printer | ForEach-Object {$Jobs = Get-PrintJob -PrinterName $_.Name -UserName"[имя_пользователя]"
if ($Jobs) { Write-Host"Принтер: $($_.Name)" }
}
- Проверьте подключённые принтеры на компьютере пользователя:
Get-Printer -ComputerName [имя_ПК_пользователя]
Если принтер сетевой, но не опубликован в AD, найдите его по IP в логах маршрутизатора или DHCP-сервера.