По независящим от меня причинам мне было поручено настроить GPO / GPP для развертывания наших более 100 принтеров на наших более 1000 клиентов.
Хорошей новостью является то, что у нас более десятка сайтов, и по большей части мне разрешено распространять все принтеры на сайте X на все клиентские ПК на сайте X.
Плохая новость заключается в том, что два способа, которыми я знаю, как это сделать ( «Развертывание с групповой политикой ...», с сервера печати » и использование настроек GPP / групповой политики ), требуют гораздо больше ручной работы, чем я готов для так много принтеров. Я даже не могу выбрать все принтеры на сервере печати и использовать Deploy with Group Policy...
опцию, например - он ожидает, что я сделаю это один за другим, чего не произойдет. GPP еще хуже , поскольку он ожидает, что я выберу путь принтера с сервера печати, а затем вручную введу кучу информации (например, IP-адрес принтера), которую он сможет получить из соединения с принтером.
Мой Google-Fu для сценария добавления всех принтеров на сервере печати в GPO / GPP оказался пустым, и я не вижу другого способа сделать это даже полуавтоматическим способом, но я придерживаюсь с верой в то, что я что-то упустил, потому что ни один здравомыслящий человек ни за что не выбрал бы ручное добавление сотен принтеров в объекты групповой политики.
В идеале я хотел бы найти программный способ использования GPP, но в сложившихся обстоятельствах любое решение, не требующее десятков часов ручного добавления принтеров, было бы просто замечательно.
У кого-нибудь есть способ сделать это, или мне нужно будет создать сценарий PowerShell и / или обмануть подчиненного в этом?
источник
$GPM = New-Object -ComObject GPMgmt.Gpm
. Я думаю, что этот интерфейс, хотя и является абсолютной свиньей для работы, может предоставить вам немного более приемлемый метод, чем просто взломать какой-нибудь XML, который выглядит и пахнет как настоящий GPO. Никто не любит COM, хотя. Меньше всего мы Пауэршеллеры.Ответы:
Я довольно сильно погуглил и даже поиграл
backup-GPO
в надежде, что смогу взломать результирующий XML-файл и повторно импортировать его, но я подозреваю, что сценарий PowerShell находится в вашем будущем.Это не так уж плохо. Вы можете сгенерировать список принтеров с ближайшего сервера, а затем просмотреть их и отобразить их.
Что-то вроде этого:
Если принтеры названы логическими вещами, и есть какой-то логический способ идентифицировать машины, вы могли бы улучшить его. Я использовал для выбора ближайшего сервера, например, на основе подтягивания IP-адреса клиента. Если IP-адрес, например, 10.20. *, Перейдите на сервер1. И т.п.
Надеюсь, это поможет.
Редактировать:
Глядя на документацию @ EvanAnderson, я почти уверен, что XML можно взломать.
Соответствующий бит моего экспортированного файла (с изменениями):
источник
По моему мнению, управление групповой политикой в Powershell - это отстой без сторонних (коммерческих) продуктов.
Я думаю, что вы застряли, просматривая XML (или HTML, если хотите ) в объектах групповой политики, чтобы делать то, что вы ищете.
К счастью, XML выглядит не так страшно . Значение UID для каждого принтера (которое, как мне кажется, @KatherineVillyard ссылается в своем комментарии) - это просто случайный GUID, сгенерированный для каждого принтера, на который есть ссылка в XML.
Вот пример кода Powershell, беззастенчиво смоделированный по примеру кода Кэтрин:
(Я пишу действительно ужасный код Powershell.)
На самом деле я не пытался заставить GPP CSE анализировать этот XML. XML действительно проверяет, по крайней мере.
Я начинаю думать о том, чтобы написать какое-то чудовище, используя
Get-GPO
и анализируя GUID, чтобы найти путь к файловой системе для объекта групповой политики в SYSVOL, но, учитывая, что мне нужно сделать какую-то реальную работу этим вечером, я думаю, что я уйду это как упражнение для читателя. > улыбка <Это должно быть очень выполнимо, хотя.источник
Недавно я предпринял аналогичный проект, и после изучения хорошего старого метода GPO push, нового GPP и сценариев я выбрал весь сценарий. Я понятия не имею, что будет работать лучше для вас, но вот пара указателей для вас:
В идеале используйте клиент с новой ОС (Windows 8/2012 +) для подключения к серверам печати и получения информации о принтере с серверов печати:
Get-Printer -компьютер PrintServerName
Используйте группы безопасности AD для сопоставления очередей печати с компьютерами. Допустим, у вас есть очередь печати (вы собрали из приведенной выше команды) с именем \ PrintServer1 \ MyColorPrinter123, создайте группу безопасности, такую как printer.group.PrintServer1.MyColorPrinter123, и добавьте компьютеры в эту группу.
В сценарии запуска есть функция для проверки членства в группах компьютера, когда он запускается, и определения, входит ли он в какие-либо группы принтеров. Если это так, используйте встроенные команды printui.exe (или printui.dll) для сопоставления принтера следующим образом.
Вызвать выражение 'rundll32 printui.dll, PrintUIEntry / ga / n "\ PrintServer1 \ MyColorPrinter123" / q'
Как только компьютер включится, эта служба диспетчера очереди печати будет выдавать «подключение к печати», как это обычно делали объекты групповой политики, любому пользователю, который собирается войти в систему.
Вы можете пойти намного более подробно **, но на высоком уровне это то, что нужно.
** Я создал графический интерфейс, который позволяет пользователям (на самом деле техническим специалистам) выбирать любой сервер печати, и он предоставляет им список принтеров на этом сервере. Если они выберут один, они смогут увидеть все его свойства. Эта информация взята из Get-Printer, о котором я упоминал выше. Если вы экспортируете эти данные в формате CSV, вы можете использовать их для отображения информации.
** Специалисты используют этот графический интерфейс для отправки запроса на добавление компьютера к принтерам, к которым он должен подключаться. Это «запрос», т.к. у них нет разрешений в AD.
** Простой бэкэнд-скрипт следит за папкой и добавляет компьютер в группу принтеров, о которой я упоминал выше. Так что, если вы уже знаете, кто должен получить какой принтер, отлично, вы можете легко это сделать. Добавление компьютеров в группы - это простая работа с командлетами AD.
** Вы также можете запланировать задание на проверку серверов печати, чтобы увидеть, есть ли новые очереди печати, и сравнить их с вашими группами AD.
Итак, создание «управляемого» решения немного сложнее, но его легко начать с основ и продолжать добавлять, чтобы иметь очень гибкую, простую в использовании систему, не требующую использования объектов групповой политики ... просто немного PowerShell
источник