Вопрос или проблема
У нас есть развертывание RDS с двумя RD Session Host. Пользователи распределяются между этими двумя узлами сессий через выделенный RD Gateway сервер. У пользователей принтеры подключены в их RDS сессиях через Group Policy Preferences. Политика обновляет подключения к принтерам на основе членства пользователя в группе и диапазона IP-адресов, из которого они подключаются.
На одном из узлов принтеры периодически отсутствуют. Политика принтеров работает нормально на другом узле сессий, который настроен идентично сломанному.
Проблема, похоже, связана с обработкой фильтров на уровне элемента, так как она возникает только в отношении принтеров, на которые применен фильтр “IP-адрес клиента” (FilterTerminal). Принтеры, которые добавляются только на основе членства в группе или которые не имеют таргетирования на уровне элемента, не затрагиваются. Трассировка Group Policy Printers (User.log) показывает следующее, когда принтеры отсутствуют:
2025-01-06 22:40:25.366 [pid=0x68c,tid=0x1140] Добавление дочерних элементов в RSOP.
2025-01-06 22:40:25.366 [pid=0x68c,tid=0x1140] Сессия: 11
2025-01-06 22:40:25.381 [pid=0x68c,tid=0x1140] Не удалось выполнить фильтр [FilterTerminal]. [ hr = 0x80070002 "Система не может найти указанный файл." ]
2025-01-06 22:40:25.381 [pid=0x68c,tid=0x1140] Ошибка фильтров. [ hr = 0x80070002 "Система не может найти указанный файл." ]
2025-01-06 22:40:25.381 [pid=0x68c,tid=0x1140] Предварительная обработка фильтра (статус может быть изменен). [ hr = 0x80070002 "Система не может найти указанный файл." ]
2025-01-06 22:40:25.381 [pid=0x68c,tid=0x1140] СОБЫТИЕ : Элемент предпочтений пользователя 'PRINTER-NAME' в Объекте групповой политики 'PRINTER-POLICY' не применился, потому что его элемент таргетирования завершился неудачно с кодом ошибки '0x80070002 Система не может найти указанный файл.'%100790273
2025-01-06 22:40:25.381 [pid=0x68c,tid=0x1140] Произошел сбой, поэтому фильтр на один раз был отменен. [ hr = 0x80070002 "Система не может найти указанный файл." ]
2025-01-06 22:40:25.381 [pid=0x68c,tid=0x1140] Фильтр не прошел, поэтому фильтр на один раз был отменен. [ hr = 0x80070002 "Система не может найти указанный файл." ]
2025-01-06 22:40:25.381 [pid=0x68c,tid=0x1140] Ошибка подавлена. [ hr = 0x80070002 "Система не может найти указанный файл." ]
Обычно, когда принтер подключается, мы видим, как расширение вызывает AddPrinterConnectionEx для добавления принтера, однако, когда возникает эта проблема, мы никогда не видим, чтобы это происходило.
Мы проверили следующее:
- Имя общего ресурса для всех принтеров, определенных в политике, корректное.
- IP-адреса, определенные в фильтрах таргетирования на уровне элемента, корректные.
- Конфигурация DNS и IP-адресации на RDS Session Host и RD Gateway корректна.
- Я могу увидеть клиентский IP, с которого пользователь подключается, в журнале TerminalServices-LocalSessionManager\Operational.
- Команды SFC/DISM были выполнены, и повреждений не обнаружено.
- Все RDS Session Host и RD Gateway работают на Windows Server 2022 с последними обновлениями.
- Все общие принтеры в политике настроены на “Обновление” вместо “Создание”. Единственное исключение — запись, которая удаляет все существующие общие принтеры перед добавлением необходимых принтеров.
- Дополнительных ошибок в журналах Microsoft-Windows-GroupPolicy\Operational или Microsoft-Windows-PrintService\Operational нет.
- Все необходимые драйверы принтеров установлены, и версия совпадает между узлами сессий и сервером печати.
- Журналов или событий, указывающих на то, что защита конечных точек (Defender for Endpoint) блокирует это, нет.
- Добавление принтеров вручную через Панель управления или через PowerShell (Add-Printer) работает нормально.
- Записи FilterTerminal в XML политик принтеров содержат все необходимые атрибуты, перечисленные в: https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-gppref/ca4571c2-7906-49fd-bae3-f2e58c098345
Статьи, которые я нашел по коду этой ошибки, обычно относятся к файловым/ярлычным GPO с проблемным UNC-путем, однако я не могу определить, в чем связь между этой ошибкой и фильтром клиентского IP.
Ответ или решение
В данной ситуации мы видим, что проблема с добавлением принтеров через Group Policy связана с ошибкой 0x80070002, что указывает на невозможность найти указанный файл. Это происходит на одном из двух RD Session Hosts в вашей среде, где пользователи подключаются через RD Gateway. Проблема возникает только с теми принтерами, которые фильтруются по IP адресу клиента с использованием "Client IP address" фильтра (FilterTerminal). Принтеры, добавляемые на основе членства в группах или без таргетирования, работают исправно.
Первоначальная диагностика
-
Проверка конфигурации: Убедитесь, что оба RD Session Hosts имеют идентичную конфигурацию. Может быть полезно сравнить конкретные настройки и файлы конфигурации.
-
Анализ журналов: В результате анализа журналов принтеров User.log видно, что проблема возникает в процессе фильтрации. Убедитесь, что все фильтры настроены корректно и, что скрипты проверки условий функционируют правильно. При необходимости протестируйте процесс фильтрации в отладочном режиме.
Возможные причины проблемы
-
Ошибки в IP фильтрации: Поскольку ошибка связана с "Client IP address", проверьте правильность диапазонов IP адресов, которые используются в таргетировании. Это может включать диапазоны, соответствующие подключающимся пользователям.
-
Недостаток файлов или ресурсов: Убедитесь, что все необходимые файлы для корректного применения политики (например, драйверы принтеров, бинарные файлы) доступны. Отсутствие файла может вызывать ошибку типа 0x80070002.
-
Сетевые проблемы: Исключите возможные проблемы с сетью, которые могут влиять на доступ к серверам, откуда захватывают принтеры.
Рекомендации для решения проблемы
-
Сопоставьте настройки: Проверьте и при необходимости синхронизируйте все настройки и версии программного обеспечения между двумя RD Session Hosts. Это важно, так как иногда незначительные несоответствия могут привести к подобным проблемам.
-
Перепроверьте доступность файлов: Убедитесь, что указанные в политике пути файлов и ресурсов правильные и доступные с проблемного хоста.
-
Пересоздайте проблему: Попробуйте исключить фильтр по IP и проследите, исчезнет ли проблема. Если да, то проблема кроется именно в этом условии.
-
Трассировка и логгирование: Включите подробное логгирование процессов, чтобы точнее определить момент, когда нарушается выполнение скрипта или фильтра.
-
Обратитесь к документации: Возможно, есть обновленные документы или патчи, касающиеся вашей версии Windows Server 2022, которые могли бы решить данный баг.
Заключение
Решение данной проблемы требует системного анализа и проверки каждой гипотезы. Используйте метод логического исключения, чтобы отсечь возможные факторы, и сфокусируйтесь на наиболее вероятных причинах. Работа с документацией Microsoft и обширное тестирование помогут сузить круг поисков и быстрее прийти к решению.