2015-01-31 2 views
0

안녕하세요, 나는 그것을 실행할 때, 또한 캐논 IR70을 삭제하는 프린터를 제거하려면 다음 VBscript가 있습니다.VBScript, 정확한 문자열 삭제

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에서 정확한 문자열 만 삭제할 수 있습니까?

미리 감사드립니다.

+0

정확한 문자열을 찾으려면'like '대신'='을 사용하지 않는 이유는 무엇입니까? – Bond

답변

0

나는 당신의 시나리오 wmi 쿼리 및 like 비교를 시도 할 수는 없지만 다음과 같이 나는 = 비교를 사용하십시오 : objPort.Delete과의 코드는 가정에서만 실행

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

그 복사 프린터 인스턴스에 대한 포트은 원래 프린터 포트에서과 다릅니다. 모든 프린터 인스턴스 (오리지널 카피)에 대해 동일한 포트 이상 추정 할 수있는 경우 : 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 
+0

여러 프린터 이름이 있습니다. (36)이 작업을 수행하고 싶습니다. 정확한 문자열 이름 만 얻으려면 = 할 수있는 방법이 있습니까? – lmilesuk