none
Instalação de impressoras em massa via script com informações de um arquivo txt RRS feed

  • Pergunta

  • Fiz um poste para instalar as impressoras atravez de um arquivo texto e o comarada Fabio Jr, me ajudou sem problemas, mas nesse momento estou querendo inserir mais informações na instalação da impressora, estou com o seguinte problema neste outro script ele executa mais não instala as printers, o arquivo de configuração e um arquivo txt com este formato:

    PrinterIP|PortNumber|DriverName|ShareName|Location 
    169.254.110.160|9100|HP LaserJet 4000 Series PS|MyNewPrinter|USA/NYC/MyDept

    Estava neste link:

    http://gallery.technet.microsoft.com/scriptcenter/Create-TCPIP-Shared-90d927a1

    Const INFILE="printers.txt" 
     
    Set fso=CreateObject("Scripting.FileSystemObject") 
    Set file = fso.OpenTextFile(INFILE) 
    While Not file.AtEndOfStream 
        line = file.ReadLine() 
        rec=Split(line,"|") 
        InstallPrinter rec(0), rec(1), rec(2),rec(3),rec(4) 
    Wend 
     
    Function InstallPrinter( strPrinterIP, strPortNumber, strDriverName, strShareName, strLocation ) 
     
        Set wmi = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") 
         
        With wmi.Get("Win32_TCPIPPrinterPort").SpawnInstance_ 
            .Name        = "IP_" & strPrinterIP  
            .Protocol    = 1 
            .HostAddress = strPrinterIP 
            .PortNumber  = strPortNumber 
            ret=.Put_() 
            WScript.StdErr.WriteLine "Port created:" & ret 
        End With 
         
         
        With wmi.Get("Win32_Printer").SpawnInstance_ 
            .DriverName = strDriverName 
            .PortName   = "IP_" & strPortIP 
            .DeviceID   = strShareName 
            .Location   = strLocation 
            .Network    = True 
            .Shared     = True 
            .ShareName  = strShareName 
            ert=.Put_() 
            WScript.StdErr.WriteLine "Printer created:" & ret 
        End With 
         
        WScript.Echo Now,"INSTALLED", strPrinterIP, strPortNumber, strDriverName, strShareName, strLocation 
         
    End Function

    Este script peguei no script center e gostaria de fazer rolar no w3k, pois preciso instalar as impressoras com uma massa de dados especificas como: local, descrição e outros. 

    quarta-feira, 29 de agosto de 2012 16:34

Respostas

  • Caro Fabio.

    Acho que consegui adaptar alguns campos no script antigo e deu certo instala com todas as informações que quero veja como ficou:

    on error resume next
     Const ForReading = 1
     Set objFSO = CreateObject("Scripting.FileSystemObject")
     'caminho do arquivo txt
     Set objTextFile = objFSO.OpenTextFile("C:\TEMP\printers.txt",ForReading)
     
    strDivide =  ";"
    nome = objTextFile.ReadLine
     
    
    Do While objTextFile.AtEndOfStream <> True
     
       nome = objTextFile.ReadLine
        arrVar = Split(nome,strDivide)
     'wscript.echo nome
     'ORDE DO ARQUIVO SEPARADO POR PONTO E VIRGULA
     'nome das impressoras; nome do compartilhamento; driver;  porta ip
     
        strNome = arrVar(0)
        strShare = arrVar(1)
        strDriver = arrVar(2)
        strIP = arrVar(3)
    	strLocation = arrVar(4)
    	strComment = arrVar(5)
           
       addPrinter strNome,strShare,strDriver,strIP,strLocation,strComment
     Loop
     
    
    
    Sub AddPrinter(Nome,Share,Driver,strIP,Location,Comment)
     strComputer = "."
     'Set objWMIService = GetObject("winmgmts:" _
     '   & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
     Set objWMIService = GetObject("winmgmts:" _
        & "{impersonationLevel=impersonate, (LoadDriver)}!\\" & strComputer & "\root\cimv2")
     Set objNewPort = objWMIService.Get _
         ("Win32_TCPIPPrinterPort").SpawnInstance_
     Set objPrinter = objWMIService.Get("Win32_Printer").SpawnInstance_
     
    
    strPorta = "9100"
     
    'CRIA A PORTA PARA COMUNICAÇÃO
     objNewPort.Name = "IP_"&strIP
     objNewPort.Protocol = 1
     objNewPort.HostAddress = strIP
     objNewPort.PortNumber = strPorta
     objNewPort.SNMPEnabled = False
     objNewPort.Put_
     
    ' INSTALA A IMPRESSORA
     'o nome do driver deve estar igual ao driver existente no windows
     objPrinter.DriverName = strDriver
     objPrinter.PortName   = "IP_"&strIP
     objPrinter.DeviceID   = Nome
     objPrinter.Location = Location
     objPrinter.Comment = Comment
     objPrinter.Network = True
     objPrinter.Shared = True
     objPrinter.ShareName = strShare
     objPrinter.Put_
     
    End sub

    Desde já agradeço. ficou show....

    quinta-feira, 30 de agosto de 2012 12:26

Todas as Respostas

  • Fernando,

    Não tenho como testar no momento mas acredito que seja o mesmo problema do anterior do seu tópico anterior

    Troque a linha

     Set wmi = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") 

    por

    Set wmi = GetObject("winmgmts:impersonationLevel=impersonate, (LoadDriver)}!\\.\root\cimv2")

    Veja que o que faz a diferença é o parametro LoadDriver


    Fábio de Paula Junior

    quarta-feira, 29 de agosto de 2012 17:29
    Moderador
  • Bom dia.

    Caro Fabio, fiz a mudança mais da erro na linha:

           'Set wmi = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
    	Set wmi = GetObject("winmgmts:impersonationLevel=impersonate, (LoadDriver)}!\\.\root\cimv2")

    Preciso identa, ou falta "" ou coisa assim.

    quinta-feira, 30 de agosto de 2012 11:14
  • Parece que faltou um "{"

    Set wmi = GetObject("winmgmts:{impersonationLevel=impersonate, (LoadDriver)}!\\.\root\cimv2")


    Fábio de Paula Junior

    quinta-feira, 30 de agosto de 2012 11:27
    Moderador
  • Caro Fabio.

    Acho que consegui adaptar alguns campos no script antigo e deu certo instala com todas as informações que quero veja como ficou:

    on error resume next
     Const ForReading = 1
     Set objFSO = CreateObject("Scripting.FileSystemObject")
     'caminho do arquivo txt
     Set objTextFile = objFSO.OpenTextFile("C:\TEMP\printers.txt",ForReading)
     
    strDivide =  ";"
    nome = objTextFile.ReadLine
     
    
    Do While objTextFile.AtEndOfStream <> True
     
       nome = objTextFile.ReadLine
        arrVar = Split(nome,strDivide)
     'wscript.echo nome
     'ORDE DO ARQUIVO SEPARADO POR PONTO E VIRGULA
     'nome das impressoras; nome do compartilhamento; driver;  porta ip
     
        strNome = arrVar(0)
        strShare = arrVar(1)
        strDriver = arrVar(2)
        strIP = arrVar(3)
    	strLocation = arrVar(4)
    	strComment = arrVar(5)
           
       addPrinter strNome,strShare,strDriver,strIP,strLocation,strComment
     Loop
     
    
    
    Sub AddPrinter(Nome,Share,Driver,strIP,Location,Comment)
     strComputer = "."
     'Set objWMIService = GetObject("winmgmts:" _
     '   & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
     Set objWMIService = GetObject("winmgmts:" _
        & "{impersonationLevel=impersonate, (LoadDriver)}!\\" & strComputer & "\root\cimv2")
     Set objNewPort = objWMIService.Get _
         ("Win32_TCPIPPrinterPort").SpawnInstance_
     Set objPrinter = objWMIService.Get("Win32_Printer").SpawnInstance_
     
    
    strPorta = "9100"
     
    'CRIA A PORTA PARA COMUNICAÇÃO
     objNewPort.Name = "IP_"&strIP
     objNewPort.Protocol = 1
     objNewPort.HostAddress = strIP
     objNewPort.PortNumber = strPorta
     objNewPort.SNMPEnabled = False
     objNewPort.Put_
     
    ' INSTALA A IMPRESSORA
     'o nome do driver deve estar igual ao driver existente no windows
     objPrinter.DriverName = strDriver
     objPrinter.PortName   = "IP_"&strIP
     objPrinter.DeviceID   = Nome
     objPrinter.Location = Location
     objPrinter.Comment = Comment
     objPrinter.Network = True
     objPrinter.Shared = True
     objPrinter.ShareName = strShare
     objPrinter.Put_
     
    End sub

    Desde já agradeço. ficou show....

    quinta-feira, 30 de agosto de 2012 12:26