您好,JW。您准确的意思是想要在运行 Windows XP 或 Windows Server 2003 的计算机上执行此操作,不是吗?您不是这个意思?明白了。嗯,我们将假设您就是这个意思,因为在 Windows XP 和 Windows Server 2003 上执行此任务很容易。这是因为在 Windows XP 和 Windows Server 2003 上,WMI 类 Win32_Printer 不仅可以轻易地区分本地打印机和网络打印机,还支持 Delete_ 方法。您可能已经猜到了,通过该方法可以删除打印机连接。换句话说,可以通过 WMI 识别并删除本地打印机。总而言之,这听起来好像正是您的问题的答案。
这确实是好事。但也有不如人意之处,在较早版本的 Windows 上,识别本地打印机要更复杂;更糟的是,Win32_Printer 类不支持 Delete_ 方法。这意味着识别和删除本地打印机要困难得多。因此,我们将重点放在从 Windows XP 和 Windows Server 2003 计算机上删除本地打印机,并希望这会解决您的问题。如果不能解决您的问题,我们只好以后再解决在 Windows 2000 计算机上删除打印机的问题。
对于 Windows XP 和 Windows Server 2003 用户,您可以使用像下面这样简单的脚本来删除所有本地打印机:
strComputer = "."
Set objWMIService = GetObject("winmgmts://" & strComputer & "/root/cimv2")
Set colInstalledPrinters = objWMIService.ExecQuery _
("Select * from Win32_Printer Where Network = FALSE")
For Each objPrinter in colInstalledPrinters
objPrinter.Delete_
Next
该脚本先是连接到本地计算机上的 WMI 服务(尽管可以轻松地修改该脚本,改为从远程计算机删除打印机)。然后我们使用以下这行代码返回所有本地打印机的集合;就 WMI 而言,如果打印机的 Network 属性设置为 False,就视该打印机为本地打印机:
Set colInstalledPrinters = objWMIService.ExecQuery _
("Select * from Win32_Printer Where Network = FALSE")
获得本地打印机集合后,我们只需设置一个 For Each 循环来遍历该集合,同时为集合中的各打印机调用 Delete_ 方法(请注意其尾部有下划线):
For Each objPrinter in colInstalledPrinters
objPrinter.Delete_
Next
您已经找到了答案:该脚本将删除所有本地打印机,而将网络打印机连接保持原状。好了,如果您的问题是关于从 Windows XP 和 Windows Server 2003 计算机上删除本地打印机,而根本不考虑如何在较早版本的操作系统中解决该问题的话,您难道不应该感到高兴了吗?
是的,没错:我们会看看是否可以在 Windows 2000 计算机上解决该问题。我们不会做出任何承诺,但我们会着手研究。