如何在没有用户介入的情况下移除打印机连接?

情况如下:我们正在用较新的型号replace11台打印机,我们将把它们安装在打印服务器上并将其共享。 计划是以不同的名称共享新的打印机,而不是replace旧的打印机。

所以我需要想出一个方法来自动删除旧打印机的客户端连接。 客户主要是几个XP的Windows 7。

我的第一个想法是从login脚本调用prnmngr.vbs删除每个旧的打印机明确的名称。 问题是有些用户在完成一天的工作后没有注销,所以在他们下一次需要打印之前,我不能指望他们的login脚本正在运行。 我可以使用SCCM远程运行prnmngr.vbs ,但如果它不是“模仿”用户,我不认为它会删除他们的打印机。 有任何想法吗? 我可以查找如何使用C#代码访问WMI并写入“特洛伊”以删除特定的打印机,而不需要用户执行任何操作? (我只是半开玩笑)。

我打开任何build议! 谢谢!

组策略打印机首选项包含一个“删除”选项。 如果您正在使用GPP GPO部署新打印机,则可以将删除项目添加到GPP GPO的最后,或者创build一个全新的Delete Printers GPO。

我只是为75台左右的打印机做了这样的过渡,并且非常顺利。 我们有一个Deploy Printers GPO在域级别链接到其中的所有打印机,映射是通过使用项目级别目标的组成员来控制的。 我们在域级还有一个Deleted Printers GPO,它拥有旧打印服务器上的所有旧打印机。 我没有打扰过滤这个,因为真的没有必要。 如果它是旧的,它的映射,它必须走了!

关于GPP项目的好处是它们以策略刷新间隔运行,这意味着不需要login/注销/重启。 只需configuration策略,链接它,然后坐下来。 不要混淆脚本或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 

困难的(或者至less是痛苦的)部分是把它推给所有的用户,而不需要他们去做一些事情(比如重新启动)。 坦率地说,我的解决scheme是发送一封电子邮件,告诉用户重新启动以获得新的打印机映射。 这样,您可以通过GPO将打印机删除脚本放入Run Onceregistry设置,然后通过GPP映射新的打印机。

如果你有一个更小或组织良好的环境,你总是可以运行一个脚本,用psexec把它推送到你所有的用户工作站(需要一个.csv或其他带有工作站列表的分隔文本文件),但是,这似乎是更多的痛苦,这是值得的,我的首选是告诉用户重新启动。