
Вчера мне кого-то очень сильно хотелось покусать. И это меньшее, что можно было сделать.
Скрипт, который работает с политикой расстановки принтеров, успешно оттестированный в изолированном окружении, был перенесен в боевую среду. Отработал на ура. Даешь пачку принтеров, выбираются нужные политики, в них вносятся нужные параметры, в общем - все прекрасно. Открываем политики в оснастке - все видно, все читается, все на местах.
Но как только клиентская Win 7 пытается такую политику прочитать - все рушится на корню. А в логах контроллеров домена вообще прекрасное: Windows cannot access the file gpt.ini. Якобы нет ни этого файла, ни самого Printers.xml, в котором принтеры лежат. Хотя все проверки показывают, что файлы - вот они, на местах.
Ломали мозг весь вечер. Сломали, отключили пару пораженных политик, от греха подальше.
Под конец моего рабочего дня, когда уже никого не было, мне пришла в голову дикая мысль. Если файл есть, но система говорит, что не может его прочитать, дело может быть в двух вещах - либо это права доступа, либо это ересь в содержимом. Права мы проверили, содержимое тоже, вся структура XML и GPT.ini на месте. Что еще? Содержимое мы можем не опознать, если не понимаем, что там написано, то есть кодировка не та. Открываю в том же Блокноте файл живой политики, даю команду Save as..., и система предлагает дефолтный вариант - ANSI. Открываю файл дохлой политики, даю ту же команду - держи Unicode. Метод xml.save() по-умолчанию сохраняет документ именно в UTF-8, out-file - аналогично.
Дальше идет очень-Очень-ОЧЕНЬ много самых отборных матюков, которые только могут прийти в мою голову. Насквозь юникодная семерка не может читать юникодовые файлы политик, подавай ей ANSI. 2012-ая ровно в таких же условиях отрабатывает на ура.
С утра пересохранили нужные файлы, включили политики (у меня на это прав нет), все отреплицировалось, все заработало. Но повторюсь - очень-Очень-ОЧЕНЬ много нехороших слов.
Скрипт пока отставили, надо его доработать, чтобы он мог с разными кодировками дружить.