none
Definir impressora padão por grupo (script para rodar no logon do usuário) RRS feed

  • Pergunta

  • Bom dia a todos,

     

    Tenho uma necessidade de instalar todos as impressoras da empresa e definir uma impressora padrão por grupo de usuários do Active Directoy, eu consegui chegar no script abaixo:

     

    Alguém consegue ajudar?

     

    REM SCRIPT PARA INSTALACAO DE IMPRESSORAS - RODAR NO LOGON DE CADA USUÀRIO

    REM Robson

     

    REM INSTALAçÃO DE IMPRESSORAS

     

    Set WshNetwork = CreateObject("WScript.Network")

     

    WshNetwork.AddWindowsPrinterConnection "\\server\printer1"

    WshNetwork.AddWindowsPrinterConnection "\\server\printer2"

     

    REM IMPRESSORA DEFAULT

    WshNetwork.SetDefaultPrinter "\\server\printer1"

     

    Aguardo.

     

    Obrigado.

     

    At.

     

    Robson

    terça-feira, 1 de julho de 2008 15:22

Respostas

  • Robson,

     

     

    Acabei de testar ele e tá funcionando normal. Voce trocou os caminhos no script para apontar o servidor e a impressora para cada grupo? Este script é para ser colocado na GPO de uma OU ai vc utiliza dominio windows? Eu não testei em um computador que não participe de um dominio.  Vou colocar os comentários na linha do script onde vc deve alterar de acordo com a estrutura na rede.

     

     

    'Script Mapeamento de impressora por grupo do usuário
    'Por Leonardo Couto Conrado
    '02.07.2008
    'On Error Resume Next

    set objNetwork= CreateObject("WScript.Network")
    strDom = objNetwork.UserDomain
    strUser = objNetwork.UserName
    Set objUser = GetObject("WinNT://" & strDom & "/" & strUser &  ",user")

    i=0
    For Each objGroup In objUser.Groups

        Select Case objGroup.Name
            Case "SF_Armazem" ' AQUI É O GRUPO QUE VC DESEJA CONECTAR A IMPRESSORA ABAIXO
       objNetwork.AddWindowsPrinterConnection "\\bahasv101\KyoceraF" 'AQUI É O CAMINHO DA IMPRESSORA COMPARTILHADA NO SEU SERVIDOR
       objNetwork.SetDefaultPrinter "\\bahasv101\KyoceraF" 'AQUI SETA A IMPRESSORA QUE FOI CONECTADA NA LINHA ACIMA COMO PADRÃO
            Case "SF_Operacoes"
                objNetwork.AddWindowsPrinterConnection "\\SERVIDOR\IMPRESSORA_SF_Operacoes"
       objNetwork.SetDefaultPrinter "\\SERVIDOR\IMPRESSORA_SF_Operacoes"
            Case "SF_Vendas"
       objNetwork.AddWindowsPrinterConnection "\\SERVIDOR\IMPRESSORA_SF_Operacoes"
       objNetwork.SetDefaultPrinter "\\SERVIDOR\IMPRESSORA_SF_Operacoes"
            Case "SF_Administrativo"
                objNetwork.AddWindowsPrinterConnection"\\SERVIDOR\IMPRESSORA_SF_Administrativo
       objNetwork.SetDefaultPrinter "\\SERVIDOR\IMPRESSORA_SF_Administrativo
        End Select

    Next

    Qualquer dúvida posta ai não tinha testado antes, mas agora testei e mapeou corretamente.Abç!!!
    quarta-feira, 2 de julho de 2008 20:56

Todas as Respostas

  • Robson,

     

    Segue abaixo script para Mapeamento de impressora padrão por grupo do usuário(Deve está na GPO em Script de Logon de usuário na OU onde estão os usuários) não deu para testar mas tenho quase certeza que não irá dar erro, qualquer dúvida é só postar!!! Abraço!

     

    'Script Mapeamento de impressora padrão por grupo do usuário
    'Por Leonardo Couto Conrado
    '02.07.2008
    On Error Resume Next

    set objNetwork= CreateObject("WScript.Network")
    strDom = objNetwork.UserDomain
    strUser = objNetwork.UserName
    Set objUser = GetObject("WinNT://" & strDom & "/" & strUser &  ",user")

    i=0
    For Each objGroup In objUser.Groups

        Select Case objGroup.Name
            Case "SF_Armazem"
       objNetwork.AddWindowsPrinterConnection "\\SERVIDOR\IMPRESSORA_SF_Armazem"
       objNetwork.SetDefaultPrinter "\\SERVIDOR\IMPRESSORA_SF_Armazem"
            Case "SF_Operacoes"
                objNetwork.AddWindowsPrinterConnection "\\SERVIDOR\IMPRESSORA_SF_Operacoes"
       objNetwork.SetDefaultPrinter "\\SERVIDOR\IMPRESSORA_SF_Operacoes"
            Case "SF_Vendas"
       objNetwork.AddWindowsPrinterConnection "\\SERVIDOR\IMPRESSORA_SF_Operacoes"
       objNetwork.SetDefaultPrinter "\\SERVIDOR\IMPRESSORA_SF_Operacoes"
            Case "SF_Administrativo"
                objNetwork.AddWindowsPrinterConnection"\\SERVIDOR\IMPRESSORA_SF_Administrativo
       objNetwork.SetDefaultPrinter "\\SERVIDOR\IMPRESSORA_SF_Administrativo
        End Select

    Next

    quarta-feira, 2 de julho de 2008 16:28
  • Leonardo,

     

    Não consegui, ao executar o script nada acontece.

    Tem alguma outra sugestão?

     

     

    Aguardo.

     

    Muito obrigado pela atenção.

    quarta-feira, 2 de julho de 2008 20:24
  • Robson,

     

     

    Acabei de testar ele e tá funcionando normal. Voce trocou os caminhos no script para apontar o servidor e a impressora para cada grupo? Este script é para ser colocado na GPO de uma OU ai vc utiliza dominio windows? Eu não testei em um computador que não participe de um dominio.  Vou colocar os comentários na linha do script onde vc deve alterar de acordo com a estrutura na rede.

     

     

    'Script Mapeamento de impressora por grupo do usuário
    'Por Leonardo Couto Conrado
    '02.07.2008
    'On Error Resume Next

    set objNetwork= CreateObject("WScript.Network")
    strDom = objNetwork.UserDomain
    strUser = objNetwork.UserName
    Set objUser = GetObject("WinNT://" & strDom & "/" & strUser &  ",user")

    i=0
    For Each objGroup In objUser.Groups

        Select Case objGroup.Name
            Case "SF_Armazem" ' AQUI É O GRUPO QUE VC DESEJA CONECTAR A IMPRESSORA ABAIXO
       objNetwork.AddWindowsPrinterConnection "\\bahasv101\KyoceraF" 'AQUI É O CAMINHO DA IMPRESSORA COMPARTILHADA NO SEU SERVIDOR
       objNetwork.SetDefaultPrinter "\\bahasv101\KyoceraF" 'AQUI SETA A IMPRESSORA QUE FOI CONECTADA NA LINHA ACIMA COMO PADRÃO
            Case "SF_Operacoes"
                objNetwork.AddWindowsPrinterConnection "\\SERVIDOR\IMPRESSORA_SF_Operacoes"
       objNetwork.SetDefaultPrinter "\\SERVIDOR\IMPRESSORA_SF_Operacoes"
            Case "SF_Vendas"
       objNetwork.AddWindowsPrinterConnection "\\SERVIDOR\IMPRESSORA_SF_Operacoes"
       objNetwork.SetDefaultPrinter "\\SERVIDOR\IMPRESSORA_SF_Operacoes"
            Case "SF_Administrativo"
                objNetwork.AddWindowsPrinterConnection"\\SERVIDOR\IMPRESSORA_SF_Administrativo
       objNetwork.SetDefaultPrinter "\\SERVIDOR\IMPRESSORA_SF_Administrativo
        End Select

    Next

    Qualquer dúvida posta ai não tinha testado antes, mas agora testei e mapeou corretamente.Abç!!!
    quarta-feira, 2 de julho de 2008 20:56
  • Tenta esse arquivo de Lote.

     

    rundll32 printui.dll,PrintUIEntry /in /n \\server\impressora 

     

    Segue descrição abaixo.

    so: rundll32 printui.dll,PrintUIEntry [opções] [@arquivodecomandos]
       /um nome de arquivo binário [file]
       /b[nome] nome da impressora base
       /c[nome] nome unc da máquina caso a ação seja em uma máquina remota
       /dl exclui impressora local
       /dn exclui conexão de impressora de rede
       /dd exclui driver de impressora
       /e exibe preferências de impressão
       /f[arquivo] arquivo INF ou de saída
       /ga adiciona conexões de impressora por computador
       /ge enumera conexões de impressora por computador
       /gd exclui conexões de impressora por computador
       /h[arch] a arquitetura do driver é uma das seguintes: Alpha | Intel | IA64 | x64
       /ia instala o driver de impressora usando arquivo INF
       /id instala o driver da impressora usando o 'Assistente para adicionar driver de impressora'
       /if instala a impressora usando o arquivo INF
       /ii instala a impressora usando o 'Assistente para adicionar impressora' com um arquivo INF
       /il instala a impressora usando o 'Assistente para adicionar impressora'
       /in adiciona uma conexão de impressora de rede
       /j[fornecedor] nome do provedor de impressão
       /k imprime página de teste para a impressora especificada, não pode ser usado com comando ao instalar uma impressora
       /l[caminho] caminho de origem do driver de impressora
       /m[modelo] nome do modelo do driver de impressão
       /n[nome] nome da impressora
       /o exibe a fila de impressão
       /p exibe propriedades de impressão
       /q modo silencioso, não exibir mensagens de erro
       /r[porta] nome da porta
       /s exibe propriedades do servidor
       /Ss armazenar as configurações da impressora em um arquivo
       /Sr restaurar as configurações da impressora de um arquivo
       Armazenar ou restaurar os sinalizadores de opção das configurações da impressora que devem ser posicionados no final do comando:
     2 PRINTER_INFO_2
     7 PRINTER_INFO_7
     c Color Profile
     d PrinterData
     s Security descriptor
     g Global DevMode
     m Minimal settings
     u User DevMode
     r Resolve name conflicts
     f Force name
     p Resolve port
       /u usa o driver de impressão existente caso ele já esteja instalado
       /t[#] página de índice inicial, começando em zero
       /v[versão] a versão do driver é uma das seguintes opções: Windows 95, 98 e Me | Windows NT 4.0 | Windows NT 4.0 ou 2000 | Windows 2000 ou Windows XP
       /w solicita um driver ao usuário caso o driver especificado não esteja no arquivo INF
       /y define impressora como padrão
       /Xg obtém configurações da impressora
       /Xs define configurações da impressora
       /z não compartilha esta impressora automaticamente
       /Y não gera um nome de impressora automaticamente
       /K altera o significado de /v e /h para aceitar 0,1,2,3, respectivamente, para Windows x64 e Windows IA64 | Windows NT x86 | Windows NT Alpha_AXP | Windows 4.0
       /Z compartilha esta impressora; pode ser usada apenas com a opção /if
       /? ajuda sobre esta mensagem
       @[arquivo] arquivo de argumento de linha de comando
       /Mw[mensagem] mostra uma mensagem de aviso antes de submeter o comando
       /Mw[mensagem] mostra uma mensagem de confirmação antes de confirmar o comando
       /W[flags] especifica sinalizadores e opções para os assistentes (para adicionar impressoras e drivers de impressora)
     r permitem que os assistentes possam ser reiniciados da última página
       /G[flags] especifica sinalizadores e opções globais
     w suprimir UI de avisos de driver de instalação (modo supersilencioso)

    Exemplos:
       Executar as propriedades do servidor:
    rundll32 printui.dll,PrintUIEntry /s /t1 /n\\computador
       Executar as propriedades da impressora:
    rundll32 printui.dll,PrintUIEntry /p /n\\computador\impressora
       Executar o 'Assistente para adicionar impressora' localmente:
    rundll32 printui.dll,PrintUIEntry /il
       Executar o 'Assistente para adicionar impressora' no \\computador:
    rundll32 printui.dll,PrintUIEntry /il /c\\computador
       Executar exibição de fila:
    rundll32 printui.dll,PrintUIEntry /o /n\\computador\impressora
       Executar a instalação do arquivo INF:
    rundll32 printui.dll,PrintUIEntry /if /b "Teste de impressão" /f "%windir%\inf\ntprint.inf" /r "lpt1:" /m "AGFA-AccuSet v52.3"
       Executar o 'Assistente para adicionar impressora' usando inf:
    rundll32 printui.dll,PrintUIEntry /ii /f %windir%\inf\ntprint.inf
       Adicionar a conexão de impressora por computador:
    rundll32 printui.dll,PrintUIEntry /ga /c\\computador /n\\computador\impressora /j"Serviços de impressão LanMan"
       Excluir a conexão de impressora por computador:
    rundll32 printui.dll,PrintUIEntry /gd /c\\computador /n\\computador\impressora
       Enumerar as conexões de impressora por computador:
    rundll32 printui.dll,PrintUIEntry /ge /c\\computador
       Adicionar o driver de impressão usando INF:
    rundll32 printui.dll,PrintUIEntry /ia /c\\computador /m "AGFA-AccuSet v52.3" /h "Intel" /v "Windows 2000 ou XP" /f %windir%\inf\ntprint.inf
       Adicionar driver de impressora usando inf:
    rundll32 printui.dll,PrintUIEntry /ia /K /c\\computador /m "AGFA-AccuSet v52.3" /h "Windows NT x86" /v 3
       Remover driver de impressora:
    rundll32 printui.dll,PrintUIEntry /dd /c\\computador /m "AGFA-AccuSet v52.3" /h "Intel" /v "Windows 2000 ou XP"
       Remover driver de impressora:
    rundll32 printui.dll,PrintUIEntry /dd /K /c\\computador /m "AGFA-AccuSet v52.3" /h "Windows NT x86" /v 3
       Definir a impressora como padrão: 
    rundll32 printui.dll,PrintUIEntry /y /n "printer"
       Definir comentário da impressora:
    rundll32 printui.dll,PrintUIEntry /Xs /n "impressora" comentário "Minha impressora"
       Obter configurações de impressora:
    rundll32 printui.dll,PrintUIEntry /Xg /n "printer"
       Obter os resultados de salvamento das configurações da impressora em um arquivo:
    rundll32 printui.dll,PrintUIEntry /f "results.txt" /Xg /n "printer"
       Definir uso de comando de configurações da impressora:
    rundll32 printui.dll,PrintUIEntry /Xs /n "printer" ?
       Armazenar todas as configurações da impressora em um arquivo:
    rundll32 printui.dll,PrintUIEntry /Ss /n "printer" /a "file.dat"
       Restaurar todas as configurações da impressora de um arquivo:
    rundll32 printui.dll,PrintUIEntry /Sr /n "printer" /a "file.dat"
       Armazenar informações sobre a impressora no nível 2 em um arquivo:
    rundll32 printui.dll,PrintUIEntry /Ss /n "printer" /a "file.dat" 2
       Restaurar de um descritor de segurança da impressora de arquivo:
    rundll32 printui.dll,PrintUIEntry /Sr /n "printer" /a "file.dat" s
       Restaurar de um devmode global da impressora de arquivo e dados de impressora:
    rundll32 printui.dll,PrintUIEntry /Sr /n "printer" /a "file.dat" g d
       Restaurar as configurações mínimas com base em um arquivo e resolver o  nome da porta:
    rundll32 printui.dll,PrintUIEntry /Sr /n "printer" /a "file.dat" m p

    quinta-feira, 3 de julho de 2008 13:12
  • Leonardo

     

    Preciso de um script para mapear as impressoras de acordo com a OU que o computador se localiza, pode me ajudar?

    quinta-feira, 7 de agosto de 2008 11:10
  • Ai velho,

     

    Saiu, leia os comentarios da linha vc deve configurar muita coisa ai no script testei aq e tá blz, ver ai qualquer duvida manda email o add no msn. Se o post foi util marque-o como resposta . Flw abç!

     

    Code Snippet

    'POR LEONARDO COUTO CONRADO
    'EM 07.08.2008
    'MAPEIA IMPRESSORA POR OU DO COMPUTADOR

    Const ADS_SCOPE_SUBTREE = 2
    'AS OU´S ABAIXO IRÃO CONCATENAR AO COMPUTADOR QUE O USUÁRIO ESTA LOGANDO, NA COLETA(LINHA 33) DOS COMPUTADORES DO AD SE ESSE FOR IGUAL AO ENCONTRADO NO AD ELE IRÁ MAPEIA A IMPRESSORA REFERENTE A A OU X.
    OU_SFArmazem = "OU=COMPUTADOR,OU=SFArmazem,DC=SF,DC=SDR" 'APONTE NESSAS LINHAS AS OU´S QUE CONTENHA COMPUTADORES DO SEU AD
    OU_SFOperacoes = "OU=COMPUTADOR,OU=SFOperacoes,DC=SF,DC=SDR"'APONTE NESSAS LINHAS AS OU´S QUE CONTENHA COMPUTADORES DO SEU AD
    OU_SFAdministrativo = "OU=COMPUTADOR,OU=SFAdministrativo,DC=SF,DC=SDR"'APONTE NESSAS LINHAS AS OU´S QUE CONTENHA COMPUTADORES DO SEU AD

    set objNetwork= CreateObject("WScript.Network")
    ComputerUserLogging = "LDAP://CN=" & objNetwork.ComputerName

    set objNetwork= CreateObject("WScript.Network")

    Set objConnection = CreateObject("ADODB.Connection")
    Set objCommand =   CreateObject("ADODB.Command")
    objConnection.Provider = "ADsDSOObject"
    objConnection.Open "Active Directory Provider"

    Set objCOmmand.ActiveConnection = objConnection
    objCommand.CommandText = _
        "Select AdsPath from 'LDAP://DC=SF,DC=SDR'" & "Where objectClass='computer'"  'NESSA LINHA COLOQUE O SEU DOMINIO USANDO A NOMECLATURA LDAP
    objCommand.Properties("Page Size") = 1000
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
    Set objRecordSet = objCommand.Execute
    objRecordSet.MoveFirst

    Do Until objRecordSet.EOF 'COLETA TODAS AS MAQUINAS DO DOMINIO
       
        AdsPathComputer = objRecordSet.Fields("AdsPath").Value
     'Wsh.echo AdsPathComputer ' SE VC NÃO SABE COMO INDICAR A 'OU' LÁ EM CIMA DO SCRIPT DESCOMENTE ESSA LINHA PARA TER UMA IDEIA
        Set objComputer = GetObject(AdsPathComputer)
       
        If Right(ComputerUserLogging, 1) <> "," Then
         ComputerUserLogging = ComputerUserLogging & ","
     End If
     
     If UCase(ComputerUserLogging & OU_SFArmazem) = UCase(AdsPathComputer) Then 'TESTA SE O PC QUE USUARIO TA LOGANDO PERTENCE A ALGUMA 'OU' QUE VC INFORMOU LÁ EM CIMA
      'Wsh.echo ComputerUserLogging & " é da OU_SFArmazem"
      objNetwork.AddWindowsPrinterConnection "\\SERVIDOR\IMPRESSORA_SF_Armazem" 'SE SIM ENTÃO MAPEIA ESTA IMPRESSORA PARA O USUÁRIO QUE ESTA LOGANDO NO PC X
         objNetwork.SetDefaultPrinter "\\SERVIDOR\IMPRESSORA_SF_Armazem"
     End If
     
     If UCase(ComputerUserLogging & OU_SFOperacoes) = UCase(AdsPathComputer) Then ''TESTA SE O PC QUE USUARIO TA LOGANDO PERTENCE A ALGUMA 'OU' QUE VC INFORMOU LÁ EM CIMA
      'Wsh.echo ComputerUserLogging & " é da OU_SFOperacoes"
      objNetwork.AddWindowsPrinterConnection "\\SERVIDOR\IMPRESSORA_SF_Operacoes"'SE SIM ENTÃO MAPEIA ESTA IMPRESSORA PARA O USUÁRIO QUE ESTA LOGANDO NO PC X
         objNetwork.SetDefaultPrinter "\\SERVIDOR\IMPRESSORA_SF_Operacoes"
     End If
     
     If UCase(ComputerUserLogging & OU_SFAdministrativo) = UCase(AdsPathComputer) Then 'IDEM
       objNetwork.AddWindowsPrinterConnection"\\SERVIDOR\IMPRESSORA_SF_Administrativo" 'IDEM
         objNetwork.SetDefaultPrinter "\\SERVIDOR\IMPRESSORA_SF_Administrativo"
        End If
       
        objRecordSet.MoveNext
    Loop

     

     

    quinta-feira, 7 de agosto de 2008 18:25
  • Bom dia robson qual versão do windows vc utilizou? pois to tentando utilizar esse seu script no windows server 2003 e não está dando certo, o que você sugeria? obrigado abraço t++ sucesso...

    quinta-feira, 25 de setembro de 2008 13:33
  • Ai velho,

     

    Saiu, leia os comentarios da linha vc deve configurar muita coisa ai no script testei aq e tá blz, ver ai qualquer duvida manda email o add no msn. Se o post foi util marque-o como resposta . Flw abç!

     

     

    Code Snippet

    'POR LEONARDO COUTO CONRADO
    'EM 07.08.2008
    'MAPEIA IMPRESSORA POR OU DO COMPUTADOR

    Const ADS_SCOPE_SUBTREE = 2
    'AS OU´S ABAIXO IRÃO CONCATENAR AO COMPUTADOR QUE O USUÁRIO ESTA LOGANDO, NA COLETA(LINHA 33) DOS COMPUTADORES DO AD SE ESSE FOR IGUAL AO ENCONTRADO NO AD ELE IRÁ MAPEIA A IMPRESSORA REFERENTE A A OU X.
    OU_SFArmazem = "OU=COMPUTADOR,OU=SFArmazem,DC=SF,DC=SDR" 'APONTE NESSAS LINHAS AS OU´S QUE CONTENHA COMPUTADORES DO SEU AD
    OU_SFOperacoes = "OU=COMPUTADOR,OU=SFOperacoes,DC=SF,DC=SDR"'APONTE NESSAS LINHAS AS OU´S QUE CONTENHA COMPUTADORES DO SEU AD
    OU_SFAdministrativo = "OU=COMPUTADOR,OU=SFAdministrativo,DC=SF,DC=SDR"'APONTE NESSAS LINHAS AS OU´S QUE CONTENHA COMPUTADORES DO SEU AD

    set objNetwork= CreateObject("WScript.Network")
    ComputerUserLogging = "LDAP://CN =" & objNetwork.ComputerName

    set objNetwork= CreateObject("WScript.Network")

    Set objConnection = CreateObject("ADODB.Connection")
    Set objCommand =   CreateObject("ADODB.Command")
    objConnection.Provider = "ADsDSOObject"
    objConnection.Open "Active Directory Provider"

    Set objCOmmand.ActiveConnection = objConnection
    objCommand.CommandText = _
        "Select AdsPath from 'LDAP://DC=SF,DC=SDR'" & "Where objectClass='computer'"  'NESSA LINHA COLOQUE O SEU DOMINIO USANDO A NOMECLATURA LDAP
    objCommand.Properties("Page Size") = 1000
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
    Set objRecordSet = objCommand.Execute
    objRecordSet.MoveFirst

    Do Until objRecordSet.EOF 'COLETA TODAS AS MAQUINAS DO DOMINIO
       
        AdsPathComputer = objRecordSet.Fields("AdsPath").Value
     'Wsh.echo AdsPathComputer ' SE VC NÃO SABE COMO INDICAR A 'OU' LÁ EM CIMA DO SCRIPT DESCOMENTE ESSA LINHA PARA TER UMA IDEIA
        Set objComputer = GetObject(AdsPathComputer)
       
        If Right(ComputerUserLogging, 1) <> "," Then
         ComputerUserLogging = ComputerUserLogging & ","
     End If
     
     If UCase(ComputerUserLogging & OU_SFArmazem) = UCase(AdsPathComputer) Then 'TESTA SE O PC QUE USUARIO TA LOGANDO PERTENCE A ALGUMA 'OU' QUE VC INFORMOU LÁ EM CIMA
      'Wsh.echo ComputerUserLogging & " é da OU_SFArmazem"
      objNetwork.AddWindowsPrinterConnection "\\SERVIDOR\IMPRESSORA_SF_Armazem " 'SE SIM ENTÃO MAPEIA ESTA IMPRESSORA PARA O USUÁRIO QUE ESTA LOGANDO NO PC X
         objNetwork.SetDefaultPrinter "\\SERVIDOR\IMPRESSORA_SF_Armazem "
     End If
     
     If UCase(ComputerUserLogging & OU_SFOperacoes) = UCase(AdsPathComputer) Then ''TESTA SE O PC QUE USUARIO TA LOGANDO PERTENCE A ALGUMA 'OU' QUE VC INFORMOU LÁ EM CIMA
      'Wsh.echo ComputerUserLogging & " é da OU_SFOperacoes"
      objNetwork.AddWindowsPrinterConnection "\\SERVIDOR\IMPRESSORA_SF_Operacoes"'SE SIM ENTÃO MAPEIA ESTA IMPRESSORA PARA O USUÁRIO QUE ESTA LOGANDO NO PC X
         objNetwork.SetDefaultPrinter "\\SERVIDOR\IMPRESSORA_SF_Operacoes "
     End If
     
     If UCase(ComputerUserLogging & OU_SFAdministrativo) = UCase(AdsPathComputer) Then 'IDEM
       objNetwork.AddWindowsPrinterConnection"\\SERVIDOR\IMPRESSORA_SF_Administrativo " 'IDEM
         objNetwork.SetDefaultPrinter "\\SERVIDOR\IMPRESSORA_SF_Administrativo "
        End If
       
        objRecordSet.MoveNext
    Loop

     

     

     

     

    Primeiramente, desculpem desenterrar o topico, mas foi o unico que achei sobre esse assunto.

    Gostaria de criar uma forma de o script verificar a qual grupo o usuário pertence e dessa forma mapear as impressoras do seu setor.

    Nesse script pelo que entendi, ele mapeia a impressora conforma a OU do computador correto?

    Obrigado desde já
    quinta-feira, 26 de novembro de 2009 15:33
  • Ai velho,

     

    Saiu, leia os comentarios da linha vc deve configurar muita coisa ai no script testei aq e tá blz, ver ai qualquer duvida manda email o add no msn. Se o post foi util marque-o como resposta . Flw abç!

     

     

    Code Snippet

    'POR LEONARDO COUTO CONRADO
    'EM 07.08.2008
    'MAPEIA IMPRESSORA POR OU DO COMPUTADOR

    Const ADS_SCOPE_SUBTREE = 2
    'AS OU´S ABAIXO IRÃO CONCATENAR AO COMPUTADOR QUE O USUÁRIO ESTA LOGANDO, NA COLETA(LINHA 33) DOS COMPUTADORES DO AD SE ESSE FOR IGUAL AO ENCONTRADO NO AD ELE IRÁ MAPEIA A IMPRESSORA REFERENTE A A OU X.
    OU_SFArmazem = "OU=COMPUTADOR,OU=SFArmazem,DC=SF,DC=SDR" 'APONTE NESSAS LINHAS AS OU´S QUE CONTENHA COMPUTADORES DO SEU AD
    OU_SFOperacoes = "OU=COMPUTADOR,OU=SFOperacoes,DC=SF,DC=SDR"'APONTE NESSAS LINHAS AS OU´S QUE CONTENHA COMPUTADORES DO SEU AD
    OU_SFAdministrativo = "OU=COMPUTADOR,OU=SFAdministrativo,DC=SF,DC=SDR"'APONTE NESSAS LINHAS AS OU´S QUE CONTENHA COMPUTADORES DO SEU AD

    set objNetwork= CreateObject("WScript.Network")
    ComputerUserLogging = "LDAP://CN =" & objNetwork.ComputerName

    set objNetwork= CreateObject("WScript.Network")

    Set objConnection = CreateObject("ADODB.Connection")
    Set objCommand =   CreateObject("ADODB.Command")
    objConnection.Provider = "ADsDSOObject"
    objConnection.Open "Active Directory Provider"

    Set objCOmmand.ActiveConnection = objConnection
    objCommand.CommandText = _
        "Select AdsPath from 'LDAP://DC=SF,DC=SDR'" & "Where objectClass='computer'"  'NESSA LINHA COLOQUE O SEU DOMINIO USANDO A NOMECLATURA LDAP
    objCommand.Properties("Page Size") = 1000
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
    Set objRecordSet = objCommand.Execute
    objRecordSet.MoveFirst

    Do Until objRecordSet.EOF 'COLETA TODAS AS MAQUINAS DO DOMINIO
       
        AdsPathComputer = objRecordSet.Fields("AdsPath").Value
     'Wsh.echo AdsPathComputer ' SE VC NÃO SABE COMO INDICAR A 'OU' LÁ EM CIMA DO SCRIPT DESCOMENTE ESSA LINHA PARA TER UMA IDEIA
        Set objComputer = GetObject(AdsPathComputer)
       
        If Right(ComputerUserLogging, 1) <> "," Then
         ComputerUserLogging = ComputerUserLogging & ","
     End If
     
     If UCase(ComputerUserLogging & OU_SFArmazem) = UCase(AdsPathComputer) Then 'TESTA SE O PC QUE USUARIO TA LOGANDO PERTENCE A ALGUMA 'OU' QUE VC INFORMOU LÁ EM CIMA
      'Wsh.echo ComputerUserLogging & " é da OU_SFArmazem"
      objNetwork.AddWindowsPrinterConnection "\\SERVIDOR\IMPRESSORA_SF_Armazem " 'SE SIM ENTÃO MAPEIA ESTA IMPRESSORA PARA O USUÁRIO QUE ESTA LOGANDO NO PC X
         objNetwork.SetDefaultPrinter "\\SERVIDOR\IMPRESSORA_SF_Armazem "
     End If
     
     If UCase(ComputerUserLogging & OU_SFOperacoes) = UCase(AdsPathComputer) Then ''TESTA SE O PC QUE USUARIO TA LOGANDO PERTENCE A ALGUMA 'OU' QUE VC INFORMOU LÁ EM CIMA
      'Wsh.echo ComputerUserLogging & " é da OU_SFOperacoes"
      objNetwork.AddWindowsPrinterConnection "\\SERVIDOR\IMPRESSORA_SF_Operacoes"'SE SIM ENTÃO MAPEIA ESTA IMPRESSORA PARA O USUÁRIO QUE ESTA LOGANDO NO PC X
         objNetwork.SetDefaultPrinter "\\SERVIDOR\IMPRESSORA_SF_Operacoes "
     End If
     
     If UCase(ComputerUserLogging & OU_SFAdministrativo) = UCase(AdsPathComputer) Then 'IDEM
       objNetwork.AddWindowsPrinterConnection"\\SERVIDOR\IMPRESSORA_SF_Administrativo " 'IDEM
         objNetwork.SetDefaultPrinter "\\SERVIDOR\IMPRESSORA_SF_Administrativo "
        End If
       
        objRecordSet.MoveNext
    Loop

     

     

     

     

    Primeiramente, desculpem desenterrar o topico, mas foi o unico que achei sobre esse assunto.

    Gostaria de criar uma forma de o script verificar a qual grupo o usuário pertence e dessa forma mapear as impressoras do seu setor.

    Nesse script pelo que entendi, ele mapeia a impressora conforma a OU do computador correto?

    Obrigado desde já

    André, boa tarde.

    Entendo o que você precisa.
    Explicando a logica do script, ele conecta ao AD verifica o grupo do usuário e retorna na função CASE. Com isso se ele estiver em 2 grupos ao mesmo tempo ele simplesmente vai efetuar a aexecução do script nos 2 grupos....

    Segue um exemplo...

    Vc deverá vericar o que vc precisa....eu coloquei Force WSUS, BgInfo e atualização de hora...pois eu utilizo no logon de meus clientes.
    Altere o case para o nome correspondente...tem que se exato...


    Set WshShell = WScript.CreateObject("WScript.Shell")
    'Force WSUS
    WshShell.Run ("wuauclt.exe /detectnow")
    'BgInfo
    WshShell.Run ("\\server\bginfo\Bginfo.exe \\server\bginfo\ws.bgi /timer:0")
    'Atualiza hora servidor
    WshShell.Run ("net time \\TimeServer /set /y"), 0, TRUE


    set objNetwork= CreateObject("WScript.Network")
    strDom = objNetwork.UserDomain
    strUser = objNetwork.UserName
    Set objUser = GetObject("WinNT://" & strDom & "/" & strUser &  ",user")
    set wshnetwork = createobject("wscript.network")

    'Remove mapeamento O e U:
    WshNetwork.RemoveNetworkDRIVE "O:",true,true
    WshNetwork.RemoveNetworkDRIVE "U:",true,true


    'Mapeamento pasta pessoal
    objNetwork.MapNetworkDrive "U:", "\\server\pessoais\"& wshnetwork.username &""
    i=0
    For Each objGroup In objUser.Groups

    Case "Vendas"
       objNetwork.MapNetworkDrive "O:", "\\server\departamentos\vendas"
       objNetwork.AddWindowsPrinterConnection "\\server\hp_vendas"
     '  objNetwork.setdefaultprinter("\\server\hp_vendas")

       Case "TI"
       objNetwork.MapNetworkDrive "O:", "\\server\departamentos\TI"
       objNetwork.AddWindowsPrinterConnection "\\server\hp_vendas"
       objNetwork.setdefaultprinter("\\server\hp_vendas")
      
       Case "Jurídico"
       objNetwork.MapNetworkDrive "O:", "\\server\departamentos\Jurídico"
       objNetwork.AddWindowsPrinterConnection "\\server\hp_vendas"
       objNetwork.setdefaultprinter("\\server\hp_vendas")

       Case "Comércio Exterior"
       objNetwork.MapNetworkDrive "O:", "\\server\departamentos\Comércio Exterior"
       objNetwork.AddWindowsPrinterConnection "\\server\hp_vendas"
    '  objNetwork.setdefaultprinter("\\server\hp_vendas")


        End Select

    Next

    Repondendo a sua pergunta. Sim, ele efetua as instruções que estiverem dentro do "CASE" Selecionado.


    Se for ultil, classifique!

    []s,
    " Qm tem boca vai a roma, meu fogão tem 6 e não saiu da cozinha ainda"
    • Editado Marcellus Bockorny quinta-feira, 26 de novembro de 2009 15:51 Adicionando informações.
    quinta-feira, 26 de novembro de 2009 15:50
  • set objNetwork= CreateObject("WScript.Network")
    strDom = objNetwork.UserDomain
    strUser = objNetwork.UserName
    Set objUser = GetObject("WinNT://" & strDom & "/" & strUser &  ",user")
    
    i=0
    For Each objGroup In objUser.Groups
    
        Select Case objGroup.Name
          Case "GPostoEnf2_LF"
       objNetwork.AddWindowsPrinterConnection "\\lftecnoset\LFPE2" 
       objNetwork.SetDefaultPrinter "\\lftecnoset\LFPE2" 
          Case "GPostoEnf3_LF"
       objNetwork.AddWindowsPrinterConnection"\\lftecnoset\LFPE3"
       objNetwork.AddWindowsPrinterConnection"\\lftecnoset\LFUTIPED" 
       objNetwork.SetDefaultPrinter "\\lftecnoset\LFPE3" 
        End Select
    
    Next
    
    Marcellus,

    Acho que estou no caminho, pois com esse script eu já consigo adicionar as impressoras execuntando o arquivo manualmente, conforme o grupo do usuário.
    Acontece que quando crio a GPO, não da certo. Será que está faltando alguma coisa?
    Ainda não entendi como eu faço para especificar a OU????

    Obrigado.

    quinta-feira, 26 de novembro de 2009 17:34
  • set objNetwork= CreateObject("WScript.Network")
    
    strDom = objNetwork.UserDomain
    
    strUser = objNetwork.UserName
    
    Set objUser = GetObject("WinNT://" & strDom & "/" & strUser &  ",user")
    
    
    
    i=0
    
    For Each objGroup In objUser.Groups
    
    
    
        Select Case objGroup.Name
    
          Case "GPostoEnf2_LF"
    
       objNetwork.AddWindowsPrinterConnection "\\lftecnoset\LFPE2" 
    
       objNetwork.SetDefaultPrinter "\\lftecnoset\LFPE2" 
    
          Case "GPostoEnf3_LF"
    
       objNetwork.AddWindowsPrinterConnection"\\lftecnoset\LFPE3"
    
       objNetwork.AddWindowsPrinterConnection"\\lftecnoset\LFUTIPED" 
    
       objNetwork.SetDefaultPrinter "\\lftecnoset\LFPE3" 
    
        End Select
    
    
    
    Next
    
    
    Marcellus,

    Acho que estou no caminho, pois com esse script eu já consigo adicionar as impressoras execuntando o arquivo manualmente, conforme o grupo do usuário.
    Acontece que quando crio a GPO, não da certo. Será que está faltando alguma coisa?
    Ainda não entendi como eu faço para especificar a OU????

    Obrigado.


    Andre, boa tarde.

    Na verdade sim e não.

    O que ocorre é que você tem 2 opções para executar scripts.

    1 - Criar GPO - E inserir na aba "Script de logon" o script.
    2 - Utilizar o Logon Script do usuário e inserir o script.

    Na 2 forma você teria que adicionar o script no \\SEUSERVIDOR\NetLogon e direcionar sua chamada dentro das propriedades do usuário no link "Logon Script"

    Lembrando que....quando vc criar uma GPO é necesário atualizar os links do AD


    Comando --- > Iniciar executar ---> gpupdate /force
    Após isso reiniciar o terminal.

    Uma outra possibilidade e mais utilizada, seria uma chamada do script em seu arquivo Batch de logon. Lógico que se possível migrar ele para vbs seria mais interessante ainda.

    Para isso, insira em seu arquivo .bat a linha:

    cscript \\SEUSERVIDOR\PASTADOSCRIPT\seuscript.vbs

    O unico problema que.... quando vc cria a GPO e coloca o script para mapear impressora, ele usa conta usuário só que o usuário NÃO LOGOU ainda. Com isso ele usa a conta system.... por esse motivo que ele não funciona.

    Testes esses ambiente e poste o resultado.

    []s,

    " Qm tem boca vai a roma, meu fogão tem 6 e não saiu da cozinha ainda"
    quinta-feira, 26 de novembro de 2009 18:32
  • Obrigado pelas dicas Marcellus, vou testar aqui eu qualquer novidade eu posto aqui.

    Abs.
    quinta-feira, 26 de novembro de 2009 19:23
  • Tenta esse arquivo de Lote.

    rundll32 printui.dll,PrintUIEntry /in /n \\server\impressora 

    Segue descrição abaixo.

    so: rundll32 printui.dll,PrintUIEntry [opções] [@arquivodecomandos]
       /um nome de arquivo binário [file]
       /b[nome] nome da impressora base
       /c[nome] nome unc da máquina caso a ação seja em uma máquina remota
       /dl exclui impressora local
       /dn exclui conexão de impressora de rede
       /dd exclui driver de impressora
       /e exibe preferências de impressão
       /f[arquivo] arquivo INF ou de saída
       /ga adiciona conexões de impressora por computador
       /ge enumera conexões de impressora por computador
       /gd exclui conexões de impressora por computador
       /h[arch] a arquitetura do driver é uma das seguintes: Alpha | Intel | IA64 | x64
       /ia instala o driver de impressora usando arquivo INF
       /id instala o driver da impressora usando o 'Assistente para adicionar driver de impressora'
       /if instala a impressora usando o arquivo INF
       /ii instala a impressora usando o 'Assistente para adicionar impressora' com um arquivo INF
       /il instala a impressora usando o 'Assistente para adicionar impressora'
       /in adiciona uma conexão de impressora de rede
       /j[fornecedor] nome do provedor de impressão
       /k imprime página de teste para a impressora especificada, não pode ser usado com comando ao instalar uma impressora
       /l[caminho] caminho de origem do driver de impressora
       /m[modelo] nome do modelo do driver de impressão
       /n[nome] nome da impressora
       /o exibe a fila de impressão
       /p exibe propriedades de impressão
       /q modo silencioso, não exibir mensagens de erro
       /r[porta] nome da porta
       /s exibe propriedades do servidor
       /Ss armazenar as configurações da impressora em um arquivo
       /Sr restaurar as configurações da impressora de um arquivo
       Armazenar ou restaurar os sinalizadores de opção das configurações da impressora que devem ser posicionados no final do comando:
     2 PRINTER_INFO_2
     7 PRINTER_INFO_7
     c Color Profile
     d PrinterData
     s Security descriptor
     g Global DevMode
     m Minimal settings
     u User DevMode
     r Resolve name conflicts
     f Force name
     p Resolve port
       /u usa o driver de impressão existente caso ele já esteja instalado
       /t[#] página de índice inicial, começando em zero
       /v[versão] a versão do driver é uma das seguintes opções: Windows 95, 98 e Me | Windows NT 4.0 | Windows NT 4.0 ou 2000 | Windows 2000 ou Windows XP
       /w solicita um driver ao usuário caso o driver especificado não esteja no arquivo INF
       /y define impressora como padrão
       /Xg obtém configurações da impressora
       /Xs define configurações da impressora
       /z não compartilha esta impressora automaticamente
       /Y não gera um nome de impressora automaticamente
       /K altera o significado de /v e /h para aceitar 0,1,2,3, respectivamente, para Windows x64 e Windows IA64 | Windows NT x86 | Windows NT Alpha_AXP | Windows 4.0
       /Z compartilha esta impressora; pode ser usada apenas com a opção /if
       /? ajuda sobre esta mensagem
       @[arquivo] arquivo de argumento de linha de comando
       /Mw[mensagem] mostra uma mensagem de aviso antes de submeter o comando
       /Mw[mensagem] mostra uma mensagem de confirmação antes de confirmar o comando
       /W[flags] especifica sinalizadores e opções para os assistentes (para adicionar impressoras e drivers de impressora)
     r permitem que os assistentes possam ser reiniciados da última página
       /G[flags] especifica sinalizadores e opções globais
     w suprimir UI de avisos de driver de instalação (modo supersilencioso)

    Exemplos:
       Executar as propriedades do servidor:
    rundll32 printui.dll,PrintUIEntry /s /t1 /n\\computador
       Executar as propriedades da impressora:
    rundll32 printui.dll,PrintUIEntry /p /n\\computador\impressora
       Executar o 'Assistente para adicionar impressora' localmente:
    rundll32 printui.dll,PrintUIEntry /il
       Executar o 'Assistente para adicionar impressora' no \\computador:
    rundll32 printui.dll,PrintUIEntry /il /c\\computador
       Executar exibição de fila:
    rundll32 printui.dll,PrintUIEntry /o /n\\computador\impressora
       Executar a instalação do arquivo INF:
    rundll32 printui.dll,PrintUIEntry /if /b "Teste de impressão" /f "%windir%\inf\ntprint.inf" /r "lpt1:" /m "AGFA-AccuSet v52.3"
       Executar o 'Assistente para adicionar impressora' usando inf:
    rundll32 printui.dll,PrintUIEntry /ii /f %windir%\inf\ntprint.inf
       Adicionar a conexão de impressora por computador:
    rundll32 printui.dll,PrintUIEntry /ga /c\\computador /n\\computador\impressora /j"Serviços de impressão LanMan"
       Excluir a conexão de impressora por computador:
    rundll32 printui.dll,PrintUIEntry /gd /c\\computador /n\\computador\impressora
       Enumerar as conexões de impressora por computador:
    rundll32 printui.dll,PrintUIEntry /ge /c\\computador
       Adicionar o driver de impressão usando INF:
    rundll32 printui.dll,PrintUIEntry /ia /c\\computador /m "AGFA-AccuSet v52.3" /h "Intel" /v "Windows 2000 ou XP" /f %windir%\inf\ntprint.inf
       Adicionar driver de impressora usando inf:
    rundll32 printui.dll,PrintUIEntry /ia /K /c\\computador /m "AGFA-AccuSet v52.3" /h "Windows NT x86" /v 3
       Remover driver de impressora:
    rundll32 printui.dll,PrintUIEntry /dd /c\\computador /m "AGFA-AccuSet v52.3" /h "Intel" /v "Windows 2000 ou XP"
       Remover driver de impressora:
    rundll32 printui.dll,PrintUIEntry /dd /K /c\\computador /m "AGFA-AccuSet v52.3" /h "Windows NT x86" /v 3
       Definir a impressora como padrão: 
    rundll32 printui.dll,PrintUIEntry /y /n "printer"
       Definir comentário da impressora:
    rundll32 printui.dll,PrintUIEntry /Xs /n "impressora" comentário "Minha impressora"
       Obter configurações de impressora:
    rundll32 printui.dll,PrintUIEntry /Xg /n "printer"
       Obter os resultados de salvamento das configurações da impressora em um arquivo:
    rundll32 printui.dll,PrintUIEntry /f "results.txt" /Xg /n "printer"
       Definir uso de comando de configurações da impressora:
    rundll32 printui.dll,PrintUIEntry /Xs /n "printer" ?
       Armazenar todas as configurações da impressora em um arquivo:
    rundll32 printui.dll,PrintUIEntry /Ss /n "printer" /a "file.dat"
       Restaurar todas as configurações da impressora de um arquivo:
    rundll32 printui.dll,PrintUIEntry /Sr /n "printer" /a "file.dat"
       Armazenar informações sobre a impressora no nível 2 em um arquivo:
    rundll32 printui.dll,PrintUIEntry /Ss /n "printer" /a "file.dat" 2
       Restaurar de um descritor de segurança da impressora de arquivo:
    rundll32 printui.dll,PrintUIEntry /Sr /n "printer" /a "file.dat" s
       Restaurar de um devmode global da impressora de arquivo e dados de impressora:
    rundll32 printui.dll,PrintUIEntry /Sr /n "printer" /a "file.dat" g d
       Restaurar as configurações mínimas com base em um arquivo e resolver o  nome da porta:
    rundll32 printui.dll,PrintUIEntry /Sr /n "printer" /a "file.dat" m p


    Perfeito.

    a única dúvida é em relação ao modo supersilencioso não consegui fazê-lo.

    ao fazer a conexão com impressora de rede, é exibida a mensagem de que voce esta prestes a fazer conexao com a impressora, se deseja instalar o driver, falando dos risco etc. Preciso que esta mensagem não aparece e o processo conclua sem necessidade de nenhuma intervenção do usuário.

    Fiz testes com os parâmetros /Gw mas não surtiu efeito, o prompt aparece do mesmo jeito.

    rundll32 printui.dll,PrintUIEntry /in /q /n "\\130.40.0.101\impfinan" /Gw

    Conto com sua ajuda, isso resolverá meu problema.

    Um abraço!

    Rodrigo Nicácio

    quarta-feira, 11 de julho de 2012 19:21