none
VBS Script Add Printer RRS feed

  • Pergunta

  • Srs. Tenho um Script em VBS cujo conteúdo segue abaixo para analise, o script está funcionando corretamente, porém preciso deixar vamos dizer mais "inteligente" ou "enxuto". Então vou expor o que desejo fazer.

    Primeiramente o script abaixo ler os grupos ao qual a conta é membro e vamos supor que a conta faz parte de 10 grupos, então será lido os 10 grupos e executado o IF e isso acaba demorando um pouco. Então pensei se é possivel fazer o seguinte:

    Ao ler os grupos apenas guardar a informação dos grupos que realmente interessam, ou seja, vamos supor que ele seja membro dos grupos:

    WS_FULL
    INTERNET_RESTRITA
    IMPRESSORA_INSTALL_0101
    IMPRESSORA_INSTALL_0102
    IMPRESSORA_REMOVE

    com base nisto gostaria que ao fazer a leitura dos grupos, apenas guardar a infromação de todos os grupos que tem o seguinte trecho "IMPRESSORA_INSTALL" e então conforme o exemplo acima, ele irá guardar os seguintes grupos:

    IMPRESSORA_INSTALL_0101
    IMPRESSORA_INSTALL_0102

    E então ir para a rotina que se fosse em DOS seria algo como:

    if impressora==IMPRESSORA_INSTALL_0101 goto

    :IMPRESSORA_0101

    linhas de códigos para dd impressora.

    Mas gostaria que isso fosse em VBS mas não sei como fazer. Seria algo como ler os atributos do qual a conta é membro e após guardar as informações somente dos grupos que me interessam, como:

    IMPRESSORA_INSTALL_0101
    IMPRESSORA_INSTALL_0102

    e ao invés de executar o código abaixo em cada IF do script:

    For each oGroup in objUser.Groups

    If UCase(oGroup.Name) = "GRUPO_IMPRESSORA_ANDAR1" Then
            objNetwork.AddWindowsPrinterConnection "\\BRIBPS02SP\MDPR1201"
          End If

    Simplesmente ele faria como se fosse um GOTO

    If UCase(oGroup.Name) = "IMPRESSORA_0101" goto

    :IMPRESSORA_0101

    objNetwork.AddWindowsPrinterConnection "\\BRIBPS02SP\MDPR1201"
    End If

    =================INICIO DO SCRIPT===========================

    On Error Resume Next
    Dim objNetwork, sDomain, sUser, objUser

    Set objNetwork = CreateObject("WScript.Network")


    sDomain = objNetwork.UserDomain
    sUser = objNetwork.UserName

    Set objUser = GetObject("WinNT://" & sDomain & "/" & sUser)

    For each oGroup in objUser.Groups

     If UCase(oGroup.Name) = "GRUPO_IMPRESSORA_ANDAR1" Then
            objNetwork.AddWindowsPrinterConnection "\\BRIBPS02SP\MDPR1201"
          End If

     If UCase(oGroup.Name) = "GRUPO_IMPRESSORA_ANDAR2" Then
            objNetwork.AddWindowsPrinterConnection "\\BRIBPS02SP\MDPR1202"
          End If

    next


    Richard Farias | INFO EVERY DAY

    terça-feira, 13 de agosto de 2013 19:44

Respostas

  • Richard,

    Não sei se vale a pena fazer isso em qualquer caso, mas tenho esta alternativa:

    Set objNetwork = CreateObject("WScript.Network")
    
    sDomain = "."
    sUser = objNetwork.UserName
    
    wscript.echo sUser
    
    Set objUser = GetObject("WinNT://" & sDomain & "/" & sUser)
    
    'CRIA STRING COM O NOME DE TODOS OS GRUPOS DESTE USUÁRIO
    For each oGroup in objUser.Groups
    	strGrupos=strGrupos & ";" & oGroup.Name & ";"
    next
    
    'TRANSFORMO EM MAIUSCULAS
    strGrupos=ucase(strGrupos)
    
    
    ' COMPARARE SEMPRE COM O NOME DO GRUPO EM MAICULOS E COM ; ANTES E DEPOIS DO NOME DO GRUPO
    if instr(strGrupos,";ADMINISTRADORES;") then
    	wscript.echo "Faz parte do grupo administradores"
    end if
    
    if instr(strGrupos,";Administrado;") then
    	wscript.echo "Faz parte do grupo administrado"
    end if
    
    if instr(strGrupos,";NETMON USERS;") then
    	wscript.echo "Faz parte do grupo NetMonusers"
    end if
    
    wscript.echo strGrupos

    Este exemplo eu fiz utilizando grupos locais mas você pode adaptar facilmente ao seu.

    Existem algumas linguagens como o Kixtart que possuem uma função especifica para isto (não me lembro o nome Ingroup talvez), mas acredito que ela faz o mesmo que você já havia feito, isto é, um loop comparando cada elemento até encontrar o nome que se encaixa.


    Fábio de Paula Junior

    • Marcado como Resposta Richard Farias segunda-feira, 19 de agosto de 2013 18:14
    sexta-feira, 16 de agosto de 2013 16:42
    Moderador

Todas as Respostas

  • Richard,

    Não sei se vale a pena fazer isso em qualquer caso, mas tenho esta alternativa:

    Set objNetwork = CreateObject("WScript.Network")
    
    sDomain = "."
    sUser = objNetwork.UserName
    
    wscript.echo sUser
    
    Set objUser = GetObject("WinNT://" & sDomain & "/" & sUser)
    
    'CRIA STRING COM O NOME DE TODOS OS GRUPOS DESTE USUÁRIO
    For each oGroup in objUser.Groups
    	strGrupos=strGrupos & ";" & oGroup.Name & ";"
    next
    
    'TRANSFORMO EM MAIUSCULAS
    strGrupos=ucase(strGrupos)
    
    
    ' COMPARARE SEMPRE COM O NOME DO GRUPO EM MAICULOS E COM ; ANTES E DEPOIS DO NOME DO GRUPO
    if instr(strGrupos,";ADMINISTRADORES;") then
    	wscript.echo "Faz parte do grupo administradores"
    end if
    
    if instr(strGrupos,";Administrado;") then
    	wscript.echo "Faz parte do grupo administrado"
    end if
    
    if instr(strGrupos,";NETMON USERS;") then
    	wscript.echo "Faz parte do grupo NetMonusers"
    end if
    
    wscript.echo strGrupos

    Este exemplo eu fiz utilizando grupos locais mas você pode adaptar facilmente ao seu.

    Existem algumas linguagens como o Kixtart que possuem uma função especifica para isto (não me lembro o nome Ingroup talvez), mas acredito que ela faz o mesmo que você já havia feito, isto é, um loop comparando cada elemento até encontrar o nome que se encaixa.


    Fábio de Paula Junior

    • Marcado como Resposta Richard Farias segunda-feira, 19 de agosto de 2013 18:14
    sexta-feira, 16 de agosto de 2013 16:42
    Moderador
  • Fábio de Paula, obrigado pela Resposta !

    Vou testar este script e verificar se há êxito.

    Referente a lingaguem Kixtart eu tenho um script que roda nesta linguagem, porém não tenho muito conhecimento em scripts deste tipo e o que tenho aqui é bem leve e creio que até seria melhor para o meu cenário. Em todo caso vou tentar me aprofundar sobre scripts administrativos e se você dispuser de material consistente eu agradeço.

    obrigado !


    Richard Farias | INFO EVERY DAY

    segunda-feira, 19 de agosto de 2013 18:17
  • Richard,

    A documentação do Kix é muito boa. Recomendo para iniciantes, é muito simples de usar.

    Um excelente exemplo é este dos grupos, eu concordo com você que aquele primeiro exemplo seu é muito ruim pois dependendo da quantidade de grupos o Loop vai dar várias voltas sem sentido e todas as vezes fazendo várias comparações. Já com o Kix tem a função INGROUP que resolve isto sem malabarismos. Além disso já possui funções de adicionar impressoras, drives de rede sem a necessidade de se preocupar com criação de objetos WSCRIPT.

    Manual do Kixtart

    http://www.kixtart.org/manual/


    Fábio de Paula Junior

    • Sugerido como Resposta fernando silva 1 segunda-feira, 19 de agosto de 2013 21:37
    segunda-feira, 19 de agosto de 2013 18:50
    Moderador