Utilizando vbs com o active directory

Publicado em 05/11/200704/05/2014 por Bruno Russo

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.

Esta entrada foi publicada em Dicas com as palavras-chave active directory, microsoft, vbs. Adicione o link permanente aos seus favoritos.