VBScript,仅删除精确字符串

时间:2015-01-31 08:00:30

标签: vbscript

您好我有以下VBscript来删除打印机,但是当我运行它时,它也只是删除Canon IR70。

Dim aPrinterModels(2)
aPrinterModels(0)="Canon IR70 (Cpoy 1)"
aPrinterModels(1)="Canon IR70 (Cpoy 2)"
aPrinterModels(2)="Canon IR70 (Cpoy 3)"

for each printer in aPrinterModels
    RemovePrinterAndPort(printer)
next

Sub RemovePrinterAndPort(strModelMask)
    on error resume next
    msiMessageTypeError = &H01000000 
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
    'objWMIService.Security_.Privileges.AddAsString "SeLoadDriverPrivilege", True
    Set colInstalledPrinters =  objWMIService.ExecQuery("Select * from Win32_Printer where name like'" & strModelMask & "%'") 
    if colInstalledPrinters.count<>0 then   
        For each objPrinter in colInstalledPrinters
            Set colInstalledPorts =  objWMIService.ExecQuery("Select * from Win32_TCPIPPrinterPort where name like '" & objPrinter.PortName & "'")
            objPrinter.Delete_
            For Each objPort in colInstalledPorts 
                objPort.Delete_
            Next
        Next
    end if
    Set colInstalledPrinters = Nothing
    Set colInstalledPorts = nothing 
    Set objWMIService = Nothing
End Sub

如何让它只删除aPrinterModels中的确切字符串?

非常感谢提前。

1 个答案:

答案 0 :(得分:0)

我无法使用您的方案wmi进行like查询,但我会使用=进行比较,如下所示:

Set colInstalledPrinters = objWMIService.ExecQuery( _
  "Select * from Win32_Printer where name = '" & strModelMask & "'")

objPort.Delete的代码段仅在假设复制的打印机实例端口与原始打印机端口不同的情况下执行。 在所有打印机实例(原始和副本)的相同端口的更合理的情况下:修改具有objPort.Delete的代码片段以有条件地执行或完全禁止它并删除未使用的端口作为独立的任务:

for each printer in aPrinterModels
    RemovePrinter(printer)
next
RemoveUnusedPorts

Sub RemovePrinter(strModelMask)
    'on error resume next
    msiMessageTypeError = &H01000000 
    Set objWMIService = GetObject( _
      "winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colInstalledPrinters = objWMIService.ExecQuery( _
    "Select * from Win32_Printer where name = '" & strModelMask & "'") 
if colInstalledPrinters.count<>0 then
    For each objPrinter in colInstalledPrinters
        ' wscript.Echo "Printer to Delete " & objPrinter.Name
        objPrinter.Delete_
    Next
end if
Set colInstalledPrinters = Nothing
Set objWMIService = Nothing
End Sub

Sub RemoveUnusedPorts
   ' code snippet to remove unused ports here
End Sub