需要修改VB脚本,以便首先删除所有现有的networking打印机

我们有一个梦幻般的VB脚本,添加了多个networking打印机,然后继续select其中一个作为默认值。

Dim multiPrinter, UNCpath1, UNCpath2, UNCpath3 UNCpath1 = "\\server\printer1" UNCpath2 = "\\server\printer2" UNCpath3 = "\\server\printer3" Set multiPrinter = CreateObject("WScript.Network") multiPrinter.AddWindowsPrinterConnection UNCpath1 multiPrinter.AddWindowsPrinterConnection UNCpath2 multiPrinter.AddWindowsPrinterConnection UNCpath3 Set WshNetwork = CreateObject("WScript.Network") PrinterPath = "\\server\printer1" PrinterDriver = "PrinterDriver" WshNetwork.AddWindowsPrinterConnection PrinterPath, PrinterDriver WshNetwork.SetDefaultPrinter "\\server\printer1" WScript.Quit 

这完美地工作 – 唯一的问题是,它不会先删除现有的networking打印机。

这是通过一个batch file(导致命令提示符窗口在login时在屏幕上闪烁)单独完成的。

 reg delete "hkcu\printers\connections" /f 

请有人build议我如何在VB脚本中包含batch file的function。

这是一个相当基本的问题,但我是VB脚本新手。 谢谢。

我最终通过Googlesearchfind了我正在寻找的东西:

http://community.spiceworks.com/topic/128389-is-it-possible-to-delete-all-offline-network-printers-with-vbscript-on-logon

我需要的VB脚本是这样的:

 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 

我已经彻底地进行了testing,它将所有的PDF打印机和本地安装的打印机保持不变,只是按照我的意愿瞄准networking打印机。

希望这有助于其他人试图实现一个非常光滑,组策略部署的打印机设置,在login时屏幕上没有闪烁的命令提示符窗口。

注意:由于我们的环境(XP,Win7 x86和Win7 x64)的混合性质,我在每台PC上以pipe理员身份login一次,以确保所有3台打印机的相应驱动程序安装成功。 所以我不依赖这个脚本来安装驱动程序(虽然它可以很容易地定制来做到这一点)。 我们的2台Win7 x64机器出于某种原因无法从networking中获取正确的驱动程序(可能是因为打印机在XP x86机器上共享?)通过以pipe理员身份login(并手动指向正确的.ini文件)确保用户没有意外的驱动程序问题。 脚本只是确保在每台PC上为每个用户显示正确的打印队列。 我不知道如何定制脚本来为多种操作系统typesselect正确的驱动程序版本,并且不希望任何事情发生。

无论如何,所有的组合,整个VB脚本在login时做以下三件事情:

1)删除该用户configuration文件中的所有现有打印队列:

 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 

2)根据需要添加多个打印队列:

 Dim multiPrinter, UNCpath1, UNCpath2, UNCpath3 UNCpath1 = "\\server\printer1" UNCpath2 = "\\server\printer2" UNCpath3 = "\\server\printer3" Set multiPrinter = CreateObject("WScript.Network") multiPrinter.AddWindowsPrinterConnection UNCpath1 multiPrinter.AddWindowsPrinterConnection UNCpath2 multiPrinter.AddWindowsPrinterConnection UNCpath3 

3)设置正确的默认打印机:

 Set WshNetwork = CreateObject("WScript.Network") PrinterPath = "\\server\printer1" PrinterDriver = "PrinterDriver" WshNetwork.AddWindowsPrinterConnection PrinterPath, PrinterDriver WshNetwork.SetDefaultPrinter "\\server\printer1" WScript.Quit 

请享用!

你可以试试这个:

 Set wshPrn = multiPrinter.EnumPrinterConnections For x = 0 To wshPrn.Count - 1 Step 2 If Left(wshPrn.Item(x + 1), 2) = "\\" Then multiPrinter.RemovePrinterConnection wshPrn.Item(x + 1), True, True Next 

或者在你的batch file的顶部,确保你有和去链接运行bat文件最小化

 @echo off 

http://www.computerhope.com/issues/ch000932.htm

祝你好运!