Как удалить подключение к принтеру без вмешательства пользователя?

Вот ситуация: мы заменяем 11 принтеров на новые модели, и мы будем устанавливать их на наш сервер печати и делиться ими. План состоит в том, чтобы делиться новыми принтерами под другими именами, чем те, которые они заменяют, и делиться старыми.

Поэтому мне нужно найти способ автоматического удаления клиентских подключений к старым принтерам. Клиенты в основном Windows 7 с несколькими XP.

Моей первой идеей было позвонить prnmngr.vbs из сценария входа в систему, чтобы удалить каждый старый принтер явно по имени. Проблема в том, что некоторые пользователи не выходят из системы, когда они завершают работу в течение дня, поэтому я не могу рассчитывать на то, что их сценарий входа в систему будет запущен до того, как им потребуется следующая печать. Я мог дистанционно бегать prnmngr.vbs используя SCCM, но если он не "подражает" пользователю, я не думаю, что он удалит их принтеры. Есть идеи? Могу я посмотреть, как получить доступ к WMI с помощью кода на C# и написать "троян" для удаления определенных принтеров, не требуя от пользователя каких-либо действий? (Я только наполовину шучу).

Я открыт для любых предложений! Спасибо!

2 ответа

Решение

Групповая политика "Настройки принтера" содержит параметр "Удалить". Если вы развертываете новые принтеры с GPO GPP, вы можете добавить элементы "Удалить" в конец или создать совершенно новый Delete Printers GPO.

Я только что сделал переход примерно для 75 принтеров, и все прошло очень гладко. У нас есть один Deploy Printers Объект групповой политики связан на уровне домена со всеми принтерами в нем, а сопоставления управляются через членство в группах с использованием таргетинга на уровне элементов. У нас также есть Deleted Printers Объект групповой политики на уровне домена, на котором установлены все старые принтеры на старом сервере печати. Я не стал фильтровать это, потому что в этом нет необходимости. Если он старый и нанесен на карту, он должен идти!

Преимущество элементов GPP заключается в том, что они запускаются с интервалами обновления политики, а это означает, что вход / выход из системы / перезагрузка не требуется. Просто настройте политику, свяжите ее и откиньтесь на спинку кресла. Никаких проблем со скриптами, WMI или чем-то подобным.

На самом деле удаление принтеров является легкой частью.

strComputer = "."

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

Set colInstalledPrinters = objWMIService.ExecQuery _
    ("Select * From Win32_Printer Where Network = True")

For Each objPrinter in colInstalledPrinters
    objPrinter.Delete_
Next

Сложная (или, по крайней мере, боль в заднице) состоит в том, чтобы распространить это на всех пользователей без необходимости что-либо делать (например, перезагрузка). Честно говоря, моим решением было бы отправить электронное письмо, в котором говорилось бы, что пользователи должны перезагрузиться, чтобы сопоставить новые принтеры. Таким образом, вы можете поместить скрипт удаления принтера в Run Once настройки реестра через GPO, а затем сопоставьте новые принтеры через GPP.

Если у вас небольшая или хорошо организованная среда, вы всегда можете запустить сценарий, чтобы распространить его на все ваши рабочие станции с помощью psexec (для этого потребуется .csv или другой текстовый файл с разделителями со списком ваших рабочих станций), но опять же, это кажется более сложной задачей, и я предпочел бы просто попросить пользователей перезагрузиться.

Другие вопросы по тегам