none
Mapeando impressora via .VBS RRS feed

  • Pergunta

  • Prezados amigos, bom dia...

     

    Preciso de um script em vbs para mapear impressoras que funcione de um modo um tanto peculiar. Vou tentar explicar a vocês o que preciso de acordo com a imagem abaixo:

     

    Basicamente, minha estrutura consiste em grupos de impressão onde dentro de cada grupo, tenho os usuários que possuem permissão para aquela determinada impressora. Até aqui, nenhuma novidade.

    O que eu gostaria?

    Gostaria de um script que lesse esses grupos e identificasse os usuários que estão no grupo e então, mapeasse a impressora para os usuários no ambiente Terminal Server.

    Já possuo as impressoras instaladas no meu print server e os drivers das impressoras instaladas em meus "Terminais Servers".

    Será que é possível fazer isso pessoal?

    Tentei usar soluções mais simples de mapeamento, mas acontece que se o usuário não tem permissão em determinada impressora, o script mostra uma mensagem de erro e aborta a instalação das demais impressoras. Caso o usuário possua permissão na impressora, aí tudo bem, a impressora é instalada sem problemas!

     

    Saudações a todos do fórum!

     

    quarta-feira, 12 de outubro de 2011 14:53

Respostas

  • Rodrigo,

    Desculpe, o objeto instanciado está incorreto. Tente com o script abaixo.

    ' Inicio do script
     
    Set objSysInfo = CreateObject("ADSystemInfo")
    Set WshNetwork = CreateObject("Wscript.Network")
     
    strUserPath = "LDAP://" & objSysInfo.UserName
    Set objUser = GetObject(strUserPath)
     
    objMemberOf = objUser.GetEx("MemberOf")
    objUserName = objUser.Get("givenName")
     
    For Each strGroup in objMemberOf
    strGroupPath = "LDAP://" & strGroup
    Set objGroup = GetObject(strGroupPath)
    strGroupName = objGroup.CN
     
    Select Case strGroupName
    Case "CCPS1209_G_IR3225_P&B_QSMS"
    WshNetwork.AddWindowsPrinterConnection "\\1209srvfs01\IR3225_COPIADORA_QSMS"
     
    Case "CCPS1209_G_HP3600_INSTRUMENTACAO"
     WshNetwork.AddWindowsPrinterConnection "\\1209srvfs01\HP_COLOR_INSTRUMENTACAO"
     
    Case "CCPS1209_G_IRC2550_COLOR_EC"
     WshNetwork.AddWindowsPrinterConnection "\\1209srvfs01\IRC2550_COLORIDA"
     
    End Select
     Next
     
    ' Fim do scrip

    Post o resultado.


    Elmo Baraúna, SSA-Ba - FSCTP / MCP / MCDST / MCTS / MCSA / MCT http://infraestruturaealgomais.blogspot.com
    • Marcado como Resposta Rodrigo R. _ terça-feira, 18 de outubro de 2011 17:05
    terça-feira, 18 de outubro de 2011 10:37

Todas as Respostas

  • Olá Rodrigo,

    Se entendi bem sua necessidade é possivel sim. Podemos testar a qual grupo o usuário pertence e de acordo com o grupo do qual ele é membro mapeamos a(s) impressora(s) ele deve ter configurada no micro.

    Veja o script abaixo onde testo os grupos e verifico de qual grupo o usuário é membro e de acordo com esse teste o script mapeia a(s) impressora(s) correta(s). 

    Caso não tenha entendido corretamente sua necessidade post para que possamos lhe ajudar.

    ' Inicio do script

    Set objSysInfo = CreateObject("ADSystemInfo")
    Set objNetwork = CreateObject("Wscript.Network")

    strUserPath = "LDAP://" & objSysInfo.UserName
    Set objUser = GetObject(strUserPath)

    objMemberOf = objUser.GetEx("MemberOf")
    objUserName = objUser.Get("givenName")

    For Each strGroup in objMemberOf
    strGroupPath = "LDAP://" & strGroup
    Set objGroup = GetObject(strGroupPath)
    strGroupName = objGroup.CN

    Select Case strGroupName
    Case "_G_IR3225_P&B_QSMS"
    WshNetwork.AddWindowsPrinterConnection "\\PrintServer\Xerox300"

    Case "_G_IR3045_ENESSA"
    WshNetwork.AddWindowsPrinterConnection "\\PrintServer\HP4000N"
    WshNetwork.AddWindowsPrinterConnection "\\PrintServer\Xerox700"

    Case "_G_IR1022_DTB"
    WshNetwork.AddWindowsPrinterConnection "\\PrintServer\Canon5x"

    End Select
    Next

    ' Fim do script

    Se lhe foi útil marque como resposta.

     


    Elmo Baraúna, SSA-Ba - FSCTP / MCP / MCDST / MCTS / MCSA / MCT http://infraestruturaealgomais.blogspot.com
    sábado, 15 de outubro de 2011 13:26
  • Olá Rodrigo,

    Se entendi bem sua necessidade é possivel sim. Podemos testar a qual grupo o usuário pertence e de acordo com o grupo do qual ele é membro mapeamos a(s) impressora(s) ele deve ter configurada no micro.

    Veja o script abaixo onde testo os grupos e verifico de qual grupo o usuário é membro e de acordo com esse teste o script mapeia a(s) impressora(s) correta(s). 

    Caso não tenha entendido corretamente sua necessidade post para que possamos lhe ajudar.

    ' Inicio do script

    Set objSysInfo = CreateObject("ADSystemInfo")
    Set objNetwork = CreateObject("Wscript.Network")

    strUserPath = "LDAP://" & objSysInfo.UserName
    Set objUser = GetObject(strUserPath)

    objMemberOf = objUser.GetEx("MemberOf")
    objUserName = objUser.Get("givenName")

    For Each strGroup in objMemberOf
    strGroupPath = "LDAP://" & strGroup
    Set objGroup = GetObject(strGroupPath)
    strGroupName = objGroup.CN

    Select Case strGroupName
    Case "_G_IR3225_P&B_QSMS"
    WshNetwork.AddWindowsPrinterConnection "\\PrintServer\Xerox300"

    Case "_G_IR3045_ENESSA"
    WshNetwork.AddWindowsPrinterConnection "\\PrintServer\HP4000N"
    WshNetwork.AddWindowsPrinterConnection "\\PrintServer\Xerox700"

    Case "_G_IR1022_DTB"
    WshNetwork.AddWindowsPrinterConnection "\\PrintServer\Canon5x"

    End Select
    Next

    ' Fim do script

    Se lhe foi útil marque como resposta.

     


    Elmo Baraúna, SSA-Ba - FSCTP / MCP / MCDST / MCTS / MCSA / MCT http://infraestruturaealgomais.blogspot.com


    Elmo, obrigado pela sua resposta!

     

    Irei testar o script em nosso ambiente e reporto aqui o funcionamento ou não do mesmo...

    segunda-feira, 17 de outubro de 2011 14:36
  • Bom dia Elmo...

     

    Adaptei o script de acordo com minhas necessidades, da seguinte forma:

    ' Inicio do script
     
    Set objSysInfo = CreateObject("ADSystemInfo")
     Set objNetwork = CreateObject("Wscript.Network")
     
    strUserPath = "LDAP://" & objSysInfo.UserName
     Set objUser = GetObject(strUserPath)
     
    objMemberOf = objUser.GetEx("MemberOf")
     objUserName = objUser.Get("givenName")
     
    For Each strGroup in objMemberOf
     strGroupPath = "LDAP://" & strGroup
     Set objGroup = GetObject(strGroupPath)
     strGroupName = objGroup.CN
     
    Select Case strGroupName
     Case "CCPS1209_G_IR3225_P&B_QSMS"
     WshNetwork.AddWindowsPrinterConnection "\\1209srvfs01\IR3225_COPIADORA_QSMS"
     
    Case "CCPS1209_G_HP3600_INSTRUMENTACAO"
     WshNetwork.AddWindowsPrinterConnection "\\1209srvfs01\HP_COLOR_INSTRUMENTACAO"
      
    Case "CCPS1209_G_IRC2550_COLOR_EC"
     WshNetwork.AddWindowsPrinterConnection "\\1209srvfs01\IRC2550_COLORIDA"
     
    End Select
     Next
     
    ' Fim do script    

    No entanto, ao rodá-lo em meu ambiente, recebo o seguinte erro:

    Não tenho nenhum conhecimento em programação ou afins, logo, não sei nem por onde começar a pesquisar sobre o erro...

    Abraços e obrigado mais uma vez!

     

    terça-feira, 18 de outubro de 2011 10:18
  • Rodrigo,

    Desculpe, o objeto instanciado está incorreto. Tente com o script abaixo.

    ' Inicio do script
     
    Set objSysInfo = CreateObject("ADSystemInfo")
    Set WshNetwork = CreateObject("Wscript.Network")
     
    strUserPath = "LDAP://" & objSysInfo.UserName
    Set objUser = GetObject(strUserPath)
     
    objMemberOf = objUser.GetEx("MemberOf")
    objUserName = objUser.Get("givenName")
     
    For Each strGroup in objMemberOf
    strGroupPath = "LDAP://" & strGroup
    Set objGroup = GetObject(strGroupPath)
    strGroupName = objGroup.CN
     
    Select Case strGroupName
    Case "CCPS1209_G_IR3225_P&B_QSMS"
    WshNetwork.AddWindowsPrinterConnection "\\1209srvfs01\IR3225_COPIADORA_QSMS"
     
    Case "CCPS1209_G_HP3600_INSTRUMENTACAO"
     WshNetwork.AddWindowsPrinterConnection "\\1209srvfs01\HP_COLOR_INSTRUMENTACAO"
     
    Case "CCPS1209_G_IRC2550_COLOR_EC"
     WshNetwork.AddWindowsPrinterConnection "\\1209srvfs01\IRC2550_COLORIDA"
     
    End Select
     Next
     
    ' Fim do scrip

    Post o resultado.


    Elmo Baraúna, SSA-Ba - FSCTP / MCP / MCDST / MCTS / MCSA / MCT http://infraestruturaealgomais.blogspot.com
    • Marcado como Resposta Rodrigo R. _ terça-feira, 18 de outubro de 2011 17:05
    terça-feira, 18 de outubro de 2011 10:37
  • Elmo...

     

    Gostaria de deixar meu agradecimento para você aqui... Obrigado amigo!

     

    Funcionou certinho... talvez precise adaptar uma ou outra coisinha, mas isso é bem mais tranquilo!

     

    Abraços

    terça-feira, 18 de outubro de 2011 17:06
  • Ok Rodrigo!

    Ótimo que ajudou!

    Abraços,


    Elmo Baraúna, SSA-Ba - FSCTP / MCP / MCDST / MCTS / MCSA / MCT http://infraestruturaealgomais.blogspot.com
    terça-feira, 18 de outubro de 2011 17:24
  • Gostei do script Elmo....porém, tem como fazer uma pequena adaptação nele? tipo assim....antes de ele mapear as impressoras....gostaria que ele verificasse se tem alguma impressora instalada e removesse qualquer uma que tivesse...tem como???
    Rombesso
    quarta-feira, 19 de outubro de 2011 11:40
  • Gostei do script Elmo....porém, tem como fazer uma pequena adaptação nele? tipo assim....antes de ele mapear as impressoras....gostaria que ele verificasse se tem alguma impressora instalada e removesse qualquer uma que tivesse...tem como???
    Rombesso


    OLá Edgar... precisei justamente fazer essa adaptação e consegui com uma pesquisa simples aqui mesmo no forum...

    Depois de adaptar, meu script ficou dessa forma:

    A parte em negrito é responsável por remover todas as impressoras mapeadas, ou seja, o script verifica as impressoras nas máquinas dos usuários e as remove... logo após, inicia o mapeamento novamente, de acordo com as permissões nos grupos!

    '==========================================================================

    'VBScript:  AUTHor:
    'NAME: <mapear_impressoras.vbs>

    'COMMENT:
    '1.Script de logon do Active Directory
    '2.Mapeia impressoras da rede de acordo com as permissões setadas no AD
    'Referências: http://www.microsoft.com/technet/scriptcenter e
    'http://social.technet.microsoft.com/Forums/pt-BR/scriptadminpt/thread
    '/64743a22-670c-481f-9beb-3b53f43fddd7/
    '==========================================================================

    'Removendo mapeamentos existentes para acertar permissões

    strComputer = "."
    Set WshNetwork = WScript.CreateObject("WScript.Network")
    Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set colInstalledPrinters = objWMIService.ExecQuery _
    ("Select * from Win32_Printer")
    For Each objPrinter in colInstalledPrinters
      If InStr(objPrinter.Name, "\\1209srvfs01") > 0 then
         WshNetwork.RemovePrinterConnection objPrinter.Name
      End if
    Next

    'Inicio do script de mapeamento

    Set objSysInfo = CreateObject("ADSystemInfo")
    Set WshNetwork = CreateObject("Wscript.Network")
     
    strUserPath = "LDAP://" & objSysInfo.UserName
    Set objUser = GetObject(strUserPath)
     
    objMemberOf = objUser.GetEx("MemberOf")
    objUserName = objUser.Get("givenName")
     
    For Each strGroup in objMemberOf
    strGroupPath = "LDAP://" & strGroup
    Set objGroup = GetObject(strGroupPath)
    strGroupName = objGroup.CN
     
    Select Case strGroupName

    Case "CCPS1209_G_HP3600_INSTRUMENTACAO"
    WshNetwork.AddWindowsPrinterConnection "\\1209srvfs01\HP_COLOR_INSTRUMENTACAO"
     
    Case "CCPS1209_G_IR1022_DTB"
    WshNetwork.AddWindowsPrinterConnection "\\1209srvfs01\IRC1022_ETIENE"

    Case "CCPS1209_G_IR1023_SECRETARIA"
    WshNetwork.AddWindowsPrinterConnection "\\1209srvfs01\IR1023_MULTIFUNCIONAL_CC"

    Case "CCPS1209_G_IR3045_ENESA"
    WshNetwork.AddWindowsPrinterConnection "\\1209srvfs01\IR3045_COPIADORA_ENESA"

    Case "CCPS1209_G_IR3225_P&B_QSMS"
    WshNetwork.AddWindowsPrinterConnection "\\1209srvfs01\IR3225_COPIADORA_QSMS"

    Case "CCPS1209_G_IR3225_P&B_RH"
    WshNetwork.AddWindowsPrinterConnection "\\1209srvfs01\IR3225_COPIADORA_RH-SHOPPING"

    Case "CCPS1209_G_IR3235_P&B_EC"
    WshNetwork.AddWindowsPrinterConnection "\\1209srvfs01\IR3235_P&B_EC"

    Case "CCPS1209_G_IR3245_P&B_VIBRAPAR"
    WshNetwork.AddWindowsPrinterConnection "\\1209srvfs01\COPIADORA_GISA"

    Case "CCPS1209_G_IR5075_P&B_ARTEC"
    WshNetwork.AddWindowsPrinterConnection "\\1209srvfs01\IR5075_COPIADORA_ARTEC"
    WshNetwork.AddWindowsPrinterConnection "\\1209srvfs01\IR5075_COPIADORA_DTB"
    WshNetwork.AddWindowsPrinterConnection "\\1209srvfs01\IR5055_COPIADORA_ARTEC"

    Case "CCPS1209_G_IR5075_P&B_DTB"
    WshNetwork.AddWindowsPrinterConnection "\\1209srvfs01\IR5075_COPIADORA_ARTEC"
    WshNetwork.AddWindowsPrinterConnection "\\1209srvfs01\IR5075_COPIADORA_DTB"
    WshNetwork.AddWindowsPrinterConnection "\\1209srvfs01\IR5055_COPIADORA_ARTEC"

    Case "CCPS1209_G_IRC2550_COLOR_EC"
    WshNetwork.AddWindowsPrinterConnection "\\1209srvfs01\IRC2550_COLORIDA"

    Case "CCPS1209_G_LBP3460_RH"
    WshNetwork.AddWindowsPrinterConnection "\\1209srvfs01\LBP3460_RH"

    Case "CCPS1209_G_LBP5560_GERENCIA"
    WshNetwork.AddWindowsPrinterConnection "\\1209srvfs01\LBP5460_GERENCIA"

    Case "CCPS1209_G_PLOTER_ARTEC"
    WshNetwork.AddWindowsPrinterConnection "\\1209srvfs01\IPF755_ARTEC"
    WshNetwork.AddWindowsPrinterConnection "\\1209srvfs01\IPF755_DTB"

    Case "CCPS1209_G_PLOTER_DTB"
    WshNetwork.AddWindowsPrinterConnection "\\1209srvfs01\IPF755_ARTEC"
    WshNetwork.AddWindowsPrinterConnection "\\1209srvfs01\IPF755_DTB"

    End Select
      Next
     
     ' Fim do scrip    


    • Editado Rodrigo R. _ quarta-feira, 19 de outubro de 2011 12:05
    • Sugerido como Resposta Edgar Rombesso terça-feira, 14 de fevereiro de 2012 12:39
    quarta-feira, 19 de outubro de 2011 12:04
  • Senhores, novamente preciso de ajuda de vocês...

    O script tem funcionado corretamente na maioria das estações...

    Em alguma, tenho observado o erro abaixo:

    Já tirei e coloquei ó usuário no grupo de impressão - Já refiz o script - Já alterei permissões da fila de impressão, etc...

    Não sei mais o que fazer... pior é que ele dá o erro e mapeia a impressora, mas se tiver uma segunda impressora, aí ele para de trabalhar.

    Não sei mais o que fazer... testei com meu usuário e o mesmo funcionou mapeando minha simpressoras numa boa, tenho mais de 10 imporssoras.

    Alguém consegue me ajudar?

    quarta-feira, 2 de novembro de 2011 16:54
  • Rodrigo,

    Por acaso esse usuário faz parte do grupo "CCPS1209_G_IR5075_P&B_ARTEC" ?

    Você falou que com seu usuário mapeia normalmente... já testou colocar seu usuário nos mesmos grupos do usuário que está com problema ou vice-versa para realizar um teste?

    Acontece somente com usuários que estão no(s) mesmo(s) grupo(s)?


    Elmo Baraúna, SSA-Ba - FSCTP / MCP / MCDST / MCTS / MCSA / MCT http://infraestruturaealgomais.blogspot.com
    quinta-feira, 3 de novembro de 2011 00:05
  • Opa Elmo, muito obrigado pela ajuda!

    Devido a correria aqui no meu serviço,nem ao menos pude vir ao forum dar um feedback.

    Bom, acabei descobrindo o problema aqui...

    Por uma falha nossa na criação do script, não estávamos definindo nenhuma impressora padrão, logo, os usuários que possuem acesso a mais de uma impressora, apresentavam a mensgaem de erro acima. AO definir uma impressora padrão, o problema sumiu, então passamos a adaptar o script para definir as impressoras padrão.

    Abraços mais uma vez

    sábado, 19 de novembro de 2011 12:26
  • Olá Rodrigo,

    Se entendi bem sua necessidade é possivel sim. Podemos testar a qual grupo o usuário pertence e de acordo com o grupo do qual ele é membro mapeamos a(s) impressora(s) ele deve ter configurada no micro.

    Veja o script abaixo onde testo os grupos e verifico de qual grupo o usuário é membro e de acordo com esse teste o script mapeia a(s) impressora(s) correta(s). 

    Caso não tenha entendido corretamente sua necessidade post para que possamos lhe ajudar.

    ' Inicio do script

    Set objSysInfo = CreateObject("ADSystemInfo")
    Set objNetwork = CreateObject("Wscript.Network")

    strUserPath = "LDAP://" & objSysInfo.UserName
    Set objUser = GetObject(strUserPath)

    objMemberOf = objUser.GetEx("MemberOf")
    objUserName = objUser.Get("givenName")

    For Each strGroup in objMemberOf
    strGroupPath = "LDAP://" & strGroup
    Set objGroup = GetObject(strGroupPath)
    strGroupName = objGroup.CN

    Select Case strGroupName
    Case "_G_IR3225_P&B_QSMS"
    WshNetwork.AddWindowsPrinterConnection "\\PrintServer\Xerox300"

    Case "_G_IR3045_ENESSA"
    WshNetwork.AddWindowsPrinterConnection "\\PrintServer\HP4000N"
    WshNetwork.AddWindowsPrinterConnection "\\PrintServer\Xerox700"

    Case "_G_IR1022_DTB"
    WshNetwork.AddWindowsPrinterConnection "\\PrintServer\Canon5x"

    End Select
    Next

    ' Fim do script

    Se lhe foi útil marque como resposta.

     


    Elmo Baraúna, SSA-Ba - FSCTP / MCP / MCDST / MCTS / MCSA / MCT http://infraestruturaealgomais.blogspot.com

    Prezado Elmo,

        Estou com um servidor de impressão, porem as estaçoes não estao no dominio.

    Existe a possibilidade de criar script para mapear a impressora

    para a estação do do usuario autenticar no servidor de impressao, foi criado um script

    net use \\servidor_de_impressao\fila_de_impressao /USER:usuario @senha#

    Agora quero que criar o script para mapear a impressora automatico.

    Aguardo seu retorno

    • Sugerido como Resposta Edgar Rombesso quarta-feira, 22 de julho de 2015 14:54
    segunda-feira, 22 de junho de 2015 14:58
  • Eustaquio,

    O servidor de impressão faz parte de um domínio? Se sim isso é um problema, pois você teria ou que colocar um usuário e senha no script (eu descarto essa opção) ou habilitar o usuário convidado nesse servidor para que não fosse solicitado credenciais para a impressão (descarto da mesma forma por questões de segurança).

    Não consegui pensar em outra forma nesse momento, infelizmente.

    Caso o servidor também não faça parte de um domínio fica fácil. Se for esse o caso me fale.


    Elmo Baraúna, SSA-Ba MCT | MCTS | MCSA | MCDST | MCP | FSCTP | MTA | VCA-DCV


    sexta-feira, 3 de julho de 2015 20:48