Вопрос или проблема
У нас есть развертывание RDS с двумя RD Session Host. Пользователи распределяются между двумя сеансовыми хостами через специализированный RD Gateway сервер. У пользователей в их RDS-сеансе принтеры подключены через Group Policy Preferences. Политика обновляет подключения принтеров в зависимости от членства пользователя в группе и диапазона IP-адресов, из которого они подключаются.
На одном из хостов принтеры периодически отсутствуют. Политика принтеров работает нормально на другом сеансовом хосте, который настроен идентично неисправному.
Проблема, кажется, связана с обработкой фильтров на уровне элемента, поскольку она затрагивает только принтеры, к которым применяется фильтр “Client IP address” (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 Hosts и RD Gateway правильная.
- Я могу видеть IP клиента, с которого пользователь подключается, в журнале TerminalServices-LocalSessionManager\Operational.
- Команды SFC/DISM были выполнены, и никаких повреждений не обнаружено.
- Все RDS Session Hosts и 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-адресов клиента.
Ответ или решение
Проблема с GPP, не добавляющим принтеры и выдающим ошибку 0x80070002, может вызвать замешательство, особенно когда другие аспекты системы работают исправно. Рассмотрим основные моменты и подходы к решению данной ситуации, основываясь на предоставленных данных.
Контекст проблемы:
-
Среда и структура системы:
- Развернуто окружение RDS с двумя серверами RD Session Host.
- Балансировка пользователей осуществляется через выделенный сервер RD Gateway.
- Принтеры подключаются в сессиях RDS через Group Policy Preferences (GPP) в зависимости от групповой принадлежности пользователя и IP-диапазона, откуда он подключается.
-
Симптомы проблемы:
- На одном из серверов RD Session Host принтеры периодически отсутствуют.
- Другая сессия с теми же настройками конфигурации подобных проблем не испытывает.
- Ошибки связаны с фильтрацией элементов на уровне (item-level targeting), особенно для "Client IP address" (FilterTerminal).
-
Журнал ошибок:
В логах пользовательской политики описаны следующие ошибки:
Failed filter [FilterTerminal]. [ hr = 0x80070002 "The system cannot find the file specified." ]
Ошибка указывает на то, что система не находит указанный файл, интерпретируя это как ошибку в фильтрации.
Возможные причины и решения:
-
Проблемы с IP-фильтрацией:
- Актуальность данных: Может быть несоответствие между действительными IP-адресами и теми, что указаны в GPP. Проверьте, нет ли изменений в сетевой конфигурации или изменённых адресов, которые не обновлены в фильтрах.
- Синхронизация LDAP: Убедитесь, что все изменения в Active Directory, касающиеся групп и IP-диапазонов, правильно реплицируются между контроллерами домена.
-
Сам файл фильтра:
- Доступность файла: Проверьте, что файл фильтра не поврежден и доступен обеим машинам. Недопустимость пути или повреждение файлов могут вызывать указанный код ошибки.
- Уточнение настроек фильтрации: Внимательно просмотрите XML-файл политики для выявления потенциальных ошибок в синтаксисе и отметьте, есть ли различия в настройках между исправным и неисправным хостами.
-
Конфигурация хостов:
- Сравнение конфигураций: Хотя оба сессионных хоста должны быть идентичными, проверьте их на наличие тонких различий в настройке сетей, установленных обновлений и настроек безопасности.
-
Журналы и диагностика:
- Просмотр других логов: Проверьте связанные логи на дополнительные ошибки, которые могут пролить свет на проблему.
- Тестирование с PowerShell: Добейтесь аналогичных условий добавления принтеров с помощью скриптов и убедитесь, что проблема именно в GPP, а не в конфигурации сети.
Заключение:
Устранение проблем с GPP требует внимательного анализа всех аспектов настройки системы, начиная от сетевых конфигураций до безопасности и структуры домена. Работая с предоставленным набором данных, важно скрупулезно тестировать каждый потенциальный источник ошибки и вносить корректировки на уровне конфигураций и поставки данных. Основное внимание уделите корректности и актуальности данных фильтрации IP.