none
Criar fila de impressão com porta UNC via script RRS feed

  • Pergunta

  • Boa Tarde.

    Eu estou querendo instalar uma impressora através de comandos de Script silenciosamente.
    Tenho a pasta dos drives da impressora extraídos num local da rede.
    Queria um script que fosse buscar esses arquivos nessa pasta e instalasse no sistema sem ser visto.
    Mas antes desta instalação gostaria que esse script limpasse todas as portas e as filas que eu setasse.

    No caso a porta UNC é uma porta local com os parametros \\nome_do_servidor\nome_compartilhamento_impressora

    Queria preferencialmente um script em VBS ou em MS-DOS se não tiver outro.

    Gostaria muito da ajuda de vocês, espero que possam me ajudar!!!

    Grato


    Att:
    Eduardo

    terça-feira, 25 de junho de 2013 20:13

Todas as Respostas

  • Eduardo

    Segue tche para que vc possa fazer a sua logica.

    instala impressora tche.

    Dim oNetwork 
    Dim Servidor
    
    Set oNetwork = createObject("wscript.network") 
    
     Servidor = "nome do servidor"
    
      oNetwork.AddWindowsPrinterConnection Servidor + "nome da impressora A"
      oNetwork.AddWindowsPrinterConnection Servidor + "nome da impressora B" 

    remove tudo tche.

    strComputer = "."
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    
    WScript.Sleep 1200
    
    Set colInstalledPrinters =  objWMIService.ExecQuery _
        ("Select * from Win32_Printer Where Network = TRUE")
    
    For Each objPrinter in colInstalledPrinters
                    on error resume next 
                    objPrinter.Delete_
    
    Next
    

    terça-feira, 25 de junho de 2013 20:47
  • Amigo nao entendi,

    vou te explicar passo a passo como vai ser e voce me explica como aplicar esses script.

    Tenho um servidor de impressão.

    Atravez de um script vou instalar o diver em uma estação de trabalho no driver dessa estação eu precisso adicionar uma porta Local com o endereço "\\nome_do_servidor\nome_compartilhamento_impressora".

    estou utilizando o script abaixo para remover uma impressora e adicionar uma impressora e associar com uma porta ja existente: 

    Option Explicit
    Dim objNetwork, strAntiga, strNova

    'VARIAVEIS QUE PRECISA ALTERAR
    strAntiga = "\\xprnbhz02\printda01_PS3"
    strNova = "\\xprnbhz02\printda01_PCL"


    Set objNetwork = CreateObject("WScript.Network")

    'REMOVE A IMPRESSORA ANTIGA'
    objNetwork.RemovePrinterConnection strAntiga


    'CONECTA A NOVA IMPRESSORA (TEM QUE TER O DRIVER INSTALADO)
    ObjNetWork.AddWindowsPrinterConnection strNova

    'DEIXA A NOVA IMPRESSORA COMO PADRAO
    objNetwork.SetDefaultPrinter strNova

    Mas esses script nao ta me ajudando mto pois em alguma estações eu nao tenho essa porta criada.


    quinta-feira, 27 de junho de 2013 14:02
  • Ba agora acho que compreendi e o codigo abaixo deve lhe ajudar tche.

    vamos por partes tche.

    na variavel strShare, vc vai definir o caminho aonde sera gravado o log de execução.

    nesta definição vc vai definir quantas impressoras vai ter nova e velha Dim strA(7), strN(7) lembrando que o 0 é contado com valor tche, sendo que o strA é a impressora antiga e o strN é a impressora nova.

    este codigo vai criar um log e caso o log ja exista ele nao executa a troca da impressora, possibilitando que vc dispare o codigo por GPO tche.

    obs. nele a impressora padrão será a ultima instalada mas vc pode colocar uma definição For Each objPrinter in colInstalledPrinters, para definir a impressora.

    segue.

    Dim objFSO, objLogFile, objNetwork, objShell, strText, intAns
    Dim intConstants, intTimeout, strTitle, intCount, blnLog
    Dim strUserName, strComputerName, strIP, strShare, strLogFile
    
    'Caminho de criação do LOG
    
    strShare = "\\servidor\log"
    
    intTimeout = 20
    
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objNetwork = CreateObject("Wscript.Network")
    Set objShell = CreateObject("Wscript.Shell")
    
    strUserName = objNetwork.Username
    strLogFile = objNetWork.Computername & ".txt"
    strComputerName = objNetwork.ComputerName
    strIP =  GetIPAddresses 'Join(GetIPAddresses())
    
    If (objFSO.FolderExists(strShare) = True) Then
        On Error Resume Next
       if not objFSO.FileExists(strShare & "\" & strLogFile) Then
          Set objLogFile = objFSO.CreateTextFile(strShare & "\" & strLogFile , True)
           If (Err.Number = 0) Then
               ' Make three attempts to write to log file.
               intCount = 1
               blnLog = False
               Do Until intCount = 3
                   objLogFile.WriteLine "Logon ; "  & Now & " ; " _
                       & strComputerName & " ; " & strUserName & " " & strIP
                   If (Err.Number = 0) Then
                       intCount = 3
                       blnLog = True
                   Else
                       Err.Clear
                       intCount = intCount + 1
                       If (Wscript.Version > 5) Then
                           Wscript.Sleep 200
                       End If
                   End If
    
    ' Troca das impressoras.
                   
    '----------------------------------------------------------------------------------
    
    Dim strA(7), strN(7)
    
    strA(0) = "\\server\impressoravelhaA"
    strN(0) = "\\server\impressoranovaA"
    
    strA(1) = "\\server\impressoravelhaB"
    strN(1) = "\\server\impressoranovaB"
    
    strA(2) = "\\server\impressoravelhaC"
    strN(2) = "\\server\impressoranovaC"
    
    strA(3) = "\\server\impressoravelhaD"
    strN(3) = "\\server\impressoranovaD"
    
    strA(4) = "\\server\impressoravelhaE"
    strN(4) = "\\server\impressoranovaE"
    
    strA(5) = "\\server\impressoravelhaF"
    strN(5) = "\\server\impressoranovaF"
    
    strA(6) = "\\server\impressoravelhaG"
    strN(6) = "\\server\impressoranovaG"
    
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:" _
        & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    
    Set colInstalledPrinters =  objWMIService.ExecQuery _
        ("Select * from Win32_Printer")
    
    For Each objPrinter in colInstalledPrinters
       For x = 0 to uBound(strA)
          if UCASE(objPrinter.Name) = UCASE(strA(x)) Then 
    
             Set objNetwork = CreateObject("WScript.Network")
              
              objNetwork.RemovePrinterConnection strA(x)
    
              objNetwork.AddWindowsPrinterConnection strN(x)
              
              ObjNetWork.AddWindowsPrinterConnection strN1(x)
    
              objNetwork.SetDefaultPrinter strN(x)
          End if
       Next
    Next
    
    	
    '----------------------------------------------------------------------------------
                   
               Loop
               On Error GoTo 0
               If (blnLog = False) Then
                   strTitle = "Logon Error"
                   strText = "Log cannot be written."
                   strText = strText & vbCrlf _
                       & "Another process may have log file open."
                   intConstants = vbOKOnly + vbExclamation
                   intAns = objShell.Popup(strText, intTimeout, strTitle, _
                       intConstants)
               End If
               objLogFile.Close
           Else
               On Error GoTo 0
               strTitle = "Logon Error"
               strText = "Log cannot be written."
               strText = strText & vbCrLf & "User may not have permissions,"
               strText = strText & vbCrLf & "or log folder may not be shared."
               intConstants = vbOKOnly + vbExclamation
               intAns = objShell.Popup(strText, intTimeout, strTitle, intConstants)
           End If
           Set objLogFile = Nothing
       End if
    End If
    
    Set objFSO = Nothing
    Set objNetwork = Nothing
    Set objShell = Nothing
    
    Wscript.Quit
    
    Function GetIPAddresses()
    Dim Loc,WbemServices,Adapters,Adapter
    Set loc = CreateObject( "WbemScripting.SWbemLocator" )
    Set WbemServices = loc.ConnectServer( ,"root\cimv2" )
    Set Adapters=WbemServices.ExecQuery( "Select * FROM" & _
    " Win32_NetworkAdapterConfiguration" )
    For Each Adapter in Adapters
       If NOT IsNull( Adapter.IPAddress) Then
         if  Left(Adapter.IPAddress(0),1) > 0 Then
            strIP = Adapter.IPAddress(0)
         End if
        
       End If
    Next
    GetIPAddresses = strIP
    End Function

    quinta-feira, 27 de junho de 2013 18:04
  • Amigo acho que nao estamos nos entendendo kkkkkkkkkkk

    vou copiar o texto anterior e explicar

    Tenho um servidor de impressão.

    Atravez de um script vou instalar o diver em uma estação de trabalho no driver dessa estação eu precisso adicionar uma porta Local com o endereço "\\nome_do_servidor\nome_compartilhamento_impressora". Porta UNC

    Ambiente:

    Servidor Windws Server 2008 x86

    Estação Windows 7 x86

    No servidor que esta com o hostname SrvImpressao e nele eu possuo uma fila de impressão com o nome: print01 com a porta Standart TCP\IP apontando para o IP : 192.168.2.100 e esta fila de impressão esta compartilhada com o nome: print01.

    Na estação eu quero criar uma fila de impressão com o mesmo driver que esta no servidor mas obs (o driver tem que ser instalado na estação e não mapeado) e quando o driver for instalado eu quero adicionar a porta que ele usara para imprimir que sera uma porta local com o endereço \\SrvImpressao\print01 a porta da impressora configurada assim tem o nome de UNC.

    O UNC funciona da seguinte maneira ao invés de usar o processamento do job de impressão no spool do servidor eu processo o job de impressão no spool da estação. 

    Desculpa o transtorno mas eu axo que consegui ser bem claro e obrigado por estar me dando esse suporte.

    sexta-feira, 28 de junho de 2013 18:31
  • Ba Eduardo

    Neste caso acho que o melhor caminho é usar GPO pelo recurso Preferencias, nele vc pode criar o objeto ate a porta tche.

    terça-feira, 2 de julho de 2013 12:10
  • Mas nao tem como nenhuma linha de comando que eu crio uma porta local e insere um valor nela ?

    igual eu falei la encima pq eu juntaria com um script de criação de fila de impressao.
    quarta-feira, 3 de julho de 2013 12:00