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

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

我们有一个很棒的 VB 脚本,可以添加多台网络打印机,然后选择其中一台作为默认打印机。

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

这很完美 - 唯一的问题是它不会先删除现有的网络打印机。

这是由批处理文件单独完成的(导致命令提示符窗口在登录时在屏幕上闪烁)。

reg delete "hkcu\printers\connections" /f

请有人告诉我如何将批处理文件的功能包含在 VB 脚本中。

这是一个相当基本的问题 - 但我对 VB 脚本还不熟悉。谢谢。

答案1

我最终通过 Google 搜索找到了我所寻找的内容:

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

我已经对其进行了彻底的测试,它保持所有 PDF 打印机和本地安装的打印机不变 - 只是按照我的需要针对网络打印机。

希望这可以帮助其他试图实现真正巧妙的、部署组策略的打印机设置的人,并且在登录时屏幕上不会闪烁命令提示符窗口。

注意:由于我们的环境是混合的(XP、Win7 x86 和 Win7 x64),我亲自在每台电脑上以管理员身份登录一次,以确保所有 3 台打印机的相应驱动程序都已成功安装。因此,我不依赖此脚本来安装驱动程序(尽管可以轻松定制以做到这一点)。我们的 2 台 Win7 x64 机器由于某种原因无法从网络中提取正确的驱动程序(可能是因为打印机在 XP x86 机器上共享?)通过以管理员身份登录(并在需要时手动指向正确的 .ini 文件),我能够确保用户不会遇到意外的驱动程序问题。该脚本只是确保在每台 PC 上为每个用户显示正确的打印队列。我不确定如何定制脚本以选择适合多种操作系统类型的正确驱动程序版本,并且不想留下任何机会。

无论如何,总的来说,整个 VB 脚本在登录时执行以下 3 件事:

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

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

享受!

答案2

你可以尝试一下:

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

或者在批处理文件的顶部,确保已经最小化并转到运行该批处理文件的链接

@echo off

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

祝你好运!

相关内容