2007 11 05 Utilizando vbs com o active directory
Post
Cancel

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.

This post is licensed under CC BY 4.0 by the author.