Precisa modificar o script VB para excluir todas as impressoras de rede existentes primeiro

1

Temos um fantástico script VB que adiciona várias impressoras de rede e depois seleciona uma delas para ser o padrão.

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

Isso funciona perfeitamente - o único problema é que ele não exclui as impressoras de rede existentes primeiro.

Isso é feito separadamente por um arquivo em lote (fazendo com que uma janela do prompt de comando pisque na tela durante o logon).

reg delete "hkcu\printers\connections" /f

Por favor, alguém poderia me aconselhar sobre como a funcionalidade do arquivo de lote pode ser incluída no script VB.

É uma questão bastante básica, mas eu sou novo no script do VB. Obrigado.

    
por Austin ''Danger'' Powers 16.07.2013 / 05:01

2 respostas

1

Consegui finalmente encontrar o que procurava com uma pesquisa no Google:

link

O script VB que eu precisava era isto:

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

Eu testei-o completamente e deixa inalteradas todas as impressoras PDF e impressoras instaladas localmente - apenas segmentando impressoras de rede como eu queria.

Espero que isso ajude outras pessoas que estão tentando obter uma configuração de impressora realmente sofisticada, implantada pela Diretiva de Grupo, sem janelas de prompt de comando piscando na tela durante o logon.

Nota: devido à natureza mista do nosso ambiente (XP, Win7 x86 e Win7 x64) eu me conectei como admin em cada PC uma vez para ter certeza de que os drivers apropriados para todas as 3 impressoras foram instalados com sucesso. Portanto, não estou contando com esse script para instalar os drivers (embora ele possa ser facilmente adaptado para isso). Nossas 2 máquinas Win7 x64 não conseguiam puxar os drivers certos da rede por algum motivo (talvez porque as impressoras compartilhassem em uma máquina XP x86?) Fazendo login como admin (e apontando manualmente para o arquivo .ini correto onde necessário) eu era capaz para garantir que os usuários não tenham problemas com drivers inesperados. O script apenas garante que as filas de impressão corretas sejam mostradas para cada usuário em cada PC. Eu não sabia como adaptar o script para escolher a versão correta do driver para vários tipos de sistema operacional e não queria deixar nada ao acaso.

De qualquer forma, tudo combinado, todo o script VB faz as seguintes 3 coisas no logon:

1) Exclui todas as filas de impressão existentes nesse perfil de usuário:

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) Adiciona várias filas de impressão conforme necessário:

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) Define a impressora padrão correta:

Set WshNetwork = CreateObject("WScript.Network")
PrinterPath = "\server\printer1"
PrinterDriver = "PrinterDriver"
WshNetwork.AddWindowsPrinterConnection PrinterPath, PrinterDriver
WshNetwork.SetDefaultPrinter "\server\printer1"
WScript.Quit

Aproveite!

    
por 16.07.2013 / 12:39
0

Você pode experimentar:

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

ou No topo do seu arquivo de lote, certifique-se de ter e vá até o link para executar o arquivo de morcego minimizado

@echo off

link

Boa sorte!

    
por 16.07.2013 / 07:14