Utilizando vbs com o active directory


Essa dica vai para quem administra servidores Active Directory da Microsoft. Existe uma grande facilidade em utilizar arquivos de lote do MS-DOS (com a extensão .bat), para realizar script’s de login, ou seja, quando o usuário faz o login em uma estação, às suas unidades de rede são mapeadas automaticamente, pois existe o script para isso.

Porém, script’s de login feitos como arquivos de lote não são tão eficientes, pois o seu desenvolvimento é limitado e muitas tarefas não podem ser realizadas 🙁

Para contornar esse problema, existe script’s em VBS (Visual Basic Script) que fornecem um pouco mais de vantagem, em relação aos arquivos de lote. O problema dos scripts em VBS é que eles são um tanto quanto “complexos” para entender, pois a sua sintaxe é totalmente diferente dos arquivos de lote.

Como existe uma grande facilidade no uso de VBS, comecei a pesquisar em que o VBS poderia me ajudar, principalmente em script’s de login. Pois imagine, uma empresa que possui 5 departamentos, logo precisaria de 5 arquivos de lote para fazer os mapeamentos específicos, sendo que com a utilização do VBS poderia utilizar apenas um script.

Apesar dos script’s feitos em VBS serem “poderosos” ainda são inferiores em relação aos script’s feitos em shell para GNU/Linux e UNIX.

Abaixo, estão alguns exemplos do uso de VBS. Estão prontos para copiar e colar!!!

As variáveis abaix, são necessárias para executar todo o script, caso utilize apenas um trecho, crie apenas as variáveis necessárias.

Dim ADSysInfo, CurrentUser, strGroups, wshNetwork, WshShell, bKey, BtnCode, oExec

Cria uma variável do tipo data, na qual obtem as informações do momento atual.

Cria uma variável que retornará o mês atual, da variável anterior.

De acordo com o mês, é exibida uma mensagem na tela para o usuário informando o mês atual.

dNow = Now
mes = Right("00" &Month(dNow), 2)

If InStr(mes, "01") Then
msgbox "Você está no mês de Janeiro", 0 + 64, "JAN"
End If
If InStr(mes, "02") Then
msgbox "Você está no mês de Fevereiro", 0 + 64, "FEV"
End If
If InStr(mes, "03") Then
msgbox "Você está no mês de Março", 0 + 64, "MAR"
End If
If InStr(mes, "04") Then
msgbox "Você está no mês de Abril", 0 + 64, "ABR"
End If
If InStr(mes, "05") Then
msgbox "Você está no mês de Maio", 0 + 64, "MAI"
End If
If InStr(mes, "06") Then
msgbox "Você está no mês de Junho", 0 + 64, "JUN"
End If
If InStr(mes, "07") Then
msgbox "Você está no mês de Julho", 0 + 64, "JUL"
End If
If InStr(mes, "08") Then
msgbox "Você está no mês de Agosto", 0 + 64, "AGO"
End If
If InStr(mes, "09") Then
msgbox "Você está no mês de Setembro", 0 + 64, "SET"
End If
If InStr(mes, "10") Then
msgbox "Você está no mês de Outubro", 0 + 64, "OUT"
End If
If InStr(mes, "11") Then
msgbox "Você está no mês de Novembro", 0 + 64, "NOV"
End If
If InStr(mes, "12") Then
msgbox "Você está no mês de Dezembro", 0 + 64, "DEZ"
End If

Grava entrada no registro

WshShell.RegWrite "HKCUSoftwareACMEFortuneTeller", 1, "REG_BINARY"

Envia um msgbox para a tela

strTitulo = "Seção Técnica de Informática"
strMensagem = _
"AVISO IMPORTANTE" & vbcrlf & vbcrlf & _
"mensagem de teste, mensagem de teste, mensagem de teste" & vbcrlf & _
"mensagem de teste, mensagem de teste, mensagem de teste" & vbcrlf & _
"e está sujeito à punição prevista no regimento interno."
'BtnCode = WshShell.Popup(strMensagem, 5, "Informação:", 64 + 0)
msgbox strMensagem, 0 + 64, strTitulo

Agora, a seção o script mais interessante, consulta a base do AD e verifica que grupo o usuario pertence. De acordo com o grupo que o usuario peretence um drive de rede será mapeado

Set ADSysInfo = CreateObject("ADSystemInfo")
Set CurrentUser = GetObject("LDAP://" & ADSysInfo.UserName)
Set wshNetwork = CreateObject("WScript.Network")
strGroups = LCase(Join(CurrentUser.MemberOf,"**"))
If InStr(strGroups, "suporte") Then
WshNetwork.RemoveNetworkDrive "Y:"
wshNetwork.MapNetworkDrive "Y:", "\IP_SERVIDORPASTA"
End If
If InStr(strGroups, "financeiro") Then
WshNetwork.RemoveNetworkDrive "Y:"
wshNetwork.MapNetworkDrive "Y:", "\NOME_SERVIDORPASTA"
End If

WshNetwork.RemoveNetworkDrive “Y:” – Desconecta a unidade de rede
wshNetwork.MapNetworkDrive “Y:”, “\192.168.8.232PASTA” – Conecta a unidade de rede

Executa um determinado programa


Set WshShell = WScript.CreateObject("WScript.Shell")
Set oExec = WshShell.Exec("C:windowscalc.exe")

O exemplo abaixo, gera um arquivo de log, a medida que o script for executado, é difícil explicar, leia e tente entender…


dim loggit_logfilename, loggit_fso, loggit_silent
loggit_logfilename = "c:msg.log"
loggit_silent = true ' log file only or with MsgBox/Echo
set loggit_fso = CreateObject("Scripting.FileSystemObject")
set stream = loggit_fso.OpenTextFile(loggit_logfilename, 8, True)
WScript.Sleep 10
comando = "calc"
stream.writeline date & " " & time & ": ==========> INICIO <=========="
WScript.Sleep 1000
stream.writeline date & " " & time & ": " & comando
Set oExec = WshShell.Exec(comando)
WScript.Sleep 3000
stream.writeline date & " " & time & ": " & comando
Set oExec = WshShell.Exec(comando)
stream.writeline date & " " & time & ": ==========> FIM <=========="
stream.close

Aspas simples () utilizado no início da linha indica um comentário

No momento estou impossibilitado de permitir o download do arquivo pronto, assim que for possíves ele poderá ser baixado.

4 pensamentos em “Utilizando vbs com o active directory”

  1. sou usuário de vbs e shellscript, cada uma tem a sua particularidade mas disse que uma é melhor que a outra, não é verdade, isso vai depender do que você quer fazer

  2. Não creio na inferioridade do VBS para o shell do linux.

    O shell do linux � poderoso, mas não pode se comparar ao vbs em questão de administra�ão de rede:

    – VBS � orientado a objetos.

    – VBS permite o controle total de outros computadores atrav�s de WMI. (que � totalmente orientado a objetos) você consegue ter acesso a qualquer informa�ão sobre outra m�quina atrav�s de consultas SQL, feitas na WMI.

    – Tem um controle alt�ssimo sobre o WINDOWS: consegue fazer praticamente tudo que � poss�vel dentro dele, inclusive coisas em baixo n�vel (mas não a n�vel de kernel, o que shell do linux tamb�m não faz e nem deve fazer).

  3. Gostaria de uma dica, pois preciso criar um script que verifica se o usuario está em um determinado grupo, se estiver criar uma chave no registro com valor 1, senão cria com valor 0.

    Tentei usar alguns que estão no seu site, mas deu erro no join qdo o usuario não está no grupo…

    Desde já agradeço e aguardo retorno

    Abraços

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *