0

アレイでプリンターを検索しようとしていますが、プリンターが存在する場合は、HTAに名前を表示します。そのビットは問題なく動作しますが、アレイにプリンターが見つからない場合は、デバイスにインストールされているすべてのプリンターが表示されます。見つかったプリンタのみを表示する方法はありますか

Set objFSO = CreateObject("Scripting.FileSystemObject")
arrPrinters = Split(objFSO.OpenTextFile("C:\Windows\DEW\denied-printers.txt" ,ForReading).ReadAll(), VbCrLf)

Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colInstalledPrinters =  objWMIService.ExecQuery("Select * from Win32_Printer")
For Each objPrinter in colInstalledPrinters
    localprinter = objPrinter.Name
    For Each strLine in arrPrinters
        If inStr(localprinter,strLine) > 0 Then 
            strHTML = strHTML & "<tr><td>" & localprinter & "</td></tr>"
    End If 
Next
Next
4

2 に答える 2

1

これを試して

If inStr(localprinter,strLine) > 0 OR inStr(localprinter,strLine) = NULL Then 

End If

問題は、配列が空で、strline が NULL であり、inStr で使用すると、'0' ではなく NULL を返すことです。それは 1 つの可能性です – tunmise fasipe 3 分前 編集

于 2012-05-30T20:42:50.470 に答える
0

あなたの主な問題(yoyrファイルの内容を知らなくても推測できます)は、instr(textToSearch、searchString)で2つのパラメーターを切り替えることです。とにかく、ここで私がテストしたコードのバージョン。

const ForReading = 1
strComputer = "."
set objFSO = createObject("Scripting.FileSystemObject")
printers = objFSO.OpenTextFile("denied-printers.txt" ,ForReading).ReadAll()
set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
set colInstalledPrinters =  objWMIService.ExecQuery("Select * from Win32_Printer")
for Each objPrinter in colInstalledPrinters
   localprinter = objPrinter.Name
   if instr(printers, localprinter) then
     strHTML = strHTML & "<tr><td>" & localprinter & "</td></tr>"
   end if
next

編集:ここではスタンドアロンのvbscriptバージョンを.vbsファイルに保存し、実行してテストします

on error resume next
const ForReading = 1 
strComputer = "." 
file = "denied-printers.txt"
set objFSO = createObject("Scripting.FileSystemObject")
set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
set colInstalledPrinters =  objWMIService.ExecQuery("Select * from Win32_Printer")
if err.number=0 then
  printers = objFSO.OpenTextFile(file ,ForReading).ReadAll()
  if err.number=0 then
    set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
    set colInstalledPrinters =  objWMIService.ExecQuery("Select * from Win32_Printer") 
    for Each objPrinter in colInstalledPrinters 
       localprinter = objPrinter.Name 
       if instr(printers, localprinter) then 
         wscript.echo localprinter & " found in " & file
       end if 
    next 
  else
    wscript.echo "file " & file & " not found, showing all printers"
    for Each objPrinter in colInstalledPrinters 
      wscript.echo objPrinter.Name
    next 
  end if
else
  wscript.echo "Error" & err.description
end if
于 2012-05-30T22:10:31.550 に答える