Escrito por Douglas Baiocco |
Um problema muito comum quando a rede
começa a crescer é a manutenção das configurações dos usuários do
domínio. Em muitos casos, cada setor possui arquivos e programas
específicos, unidades de rede e impressoras. Não é diferente onde
trabalho. Pensando em facilitar um pouco a nossa vida, utilizamos alguns
recursos do próprio sistema operacional, dentre os quais podemos citar
os scripts de logon. Este recurso é de extrema importância para todo
administrador, já que automatiza muitas funções importantes do sistema,
tais como mapeamento de impressoras, cópia de ícones, execução de
programas, mapeamento de unidades de disco, etc.
A linguagem para a criação dos scripts
pode ser um simples arquivo de lote do MS-DOS até sofisticados programas
executáveis. Nós utilizamos aqui uma linguagem bastante poderosa:
Wscript (Windows Shell Script), que além de realizar todas as tarefas
que necessitamos, nos permite muito mais controle sobre o que está sendo
executado.
Nosso cenário, até o momento, é este:
Existem vários setores na empresa, cada
qual com suas impressoras. As impressoras são instaladas em uma máquina
com Windows 2003 Server funcionando como servidor de impressão. Cada
impressora é compartilhada no servidor e instalada nas máquinas dos
setores.
Existe uma unidade de rede em outro
servidor, compartilhada e com as permissões de acesso definidas pelos
grupos dos setores. Cada máquina deve estar com o drive z: apontando
para esta pasta compartilhada.
Alguns ícones devem ser colocados na
área de trabalho dos usuários, para que este tenha acesso facilitado aos
programas da empresa.
Temos aproximadamente 350 equipamentos
entre notebooks e desktops na rede e aproximadamente 800 usuários ativos
cadastrados no Active Directory. Imagine o problema quando surge um
pedido como esse: “Precisamos alterar o ícone do programa XYZ dos
usuários”.
Esse era um tipo de pesadelo que tínhamos todas as noites, daqueles que, ao acordarmos, preferíamos não dormir novamente.
No começo, entravamos em cada perfil de
usuário, na pasta desktop e alterávamos o ícone. Após duas semanas,
estavam todos alterados. Depois de algumas vezes repetindo este
processo, resolvemos adotar uma solução mais “inteligente”: colocar os
ícones no desktop da pasta All Users, replicando assim para todos os
usuários da máquina. Maravilha! Reduziram o serviço pela metade, mas
ainda assim, uma semana era perdida.
Enfim, alguma luz começou a aparecer no fim do túnel: desenvolvemos algumas tarefas automatizadas com scripts de logon. Scripts mal feitos, diga-se de passagem, primitivos, realizavam basicamente o mapeamento de unidades de rede. Mas como uma árvore plantada, regada e cuidada com muito carinho, o nosso script cresceu, tomou forma, tornou-se um belo script de logon em sua plena forma. Agora, não tememos mais alterações de ícones, não temos calafrios com a chegada de novos usuários e não perdemos nossas noites de sono tentando lembrar em quais usuários esquecemos de instalar aquela impressora nova. As funções do script que utilizamos são: Mapeamento de unidades de rede Criação dos ícones na área de trabalho do usuário Instalação da impressora de acordo com a Unidade Organizacional em que o usuário se encontra Definição de máquinas especiais para testes Execução de programas diários de auditoria Todas essas funções serão descritas aqui, da forma mais objetiva possível, para a propagação deste incrível recurso. Eu aceito sugestões e melhorias nos scripts, já que não sou programador por profissão, portanto, há possibilidade de erros. Lembre-se, não estou ensinando a linguagem, nem tenho conhecimento suficiente para isso, apenas estou demonstrando o que muita pesquisa e trabalho podem realizar. Caso tenha realmente interesse em WSH, existem muitos livros, dicas e tutoriais na internet para a consulta. “Deus disse: Faça-se a luz e a luz foi feita” Abaixo o script de logon, com explicações sobre os pontos importantes: ‘##################################################################### ‘Este é um ponto bastante interessante do arquivo de script. É aqui que tudo começa e onde tudo pode terminar. Esta linha faz com que o script continue sua execução em caso de encontrar algum erro em sua programação. Caso esta linha esteja comentada ou não exista, a cada erro na execução, aparecerá uma mensagem e o script encerra sua atividade. Deixe esta recurso ‘##################################################################### On Error Resume Next ‘##################################################################### ‘Neste ponto definimos os objetos e variáveis que iremos utilizar durante o script ‘##################################################################### Set net = CreateObject("WScript.Network") Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2") Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_ComputerSystem",,48) Set unidades = CreateObject("Scripting.FileSystemObject") Set objShell = CreateObject("Shell.Application") Set wshShell = CreateObject("WScript.Shell") objDesktop = wshShell.SpecialFolders("Desktop") strUserProfile = wshShell.ExpandEnvironmentStrings("%USERPROFILE%") set fso=createobject("scripting.filesystemobject") For Each objItem in colItems NomeComputador = objItem.Caption next ‘##################################################################### ‘##################################################################### ‘Identifica em que Unidade Organizacional está localizado o usuário corrente e atribui a variável ou. ‘Observe a linha onde devemos colocar o nome do domínio da máquina(substitua “seu domínio” pelo nome do domínio da sua rede) ‘##################################################################### strUserId = net.UserName Const ADS_SCOPE_SUBTREE = 2 Set objConnection = CreateObject("ADODB.Connection") Set objCommand = CreateObject("ADODB.Command") objConnection.Provider = "ADsDSOObject" objConnection.Open "Active Directory Provider" Set objCommand.ActiveConnection = objConnection objCommand.Properties("Page Size") = 2000 objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE objCommand.CommandText = "SELECT samaccountname, distinguishedName FROM LDAP://dc=seu dominio,dc=com,dc=br' WHERE objectCategory='user' AND sAMAccountName='" & strUserId & "'" Set objRecordSet = objCommand.Execute intCounter = 0 objRecordSet.MoveFirst Do Until objRecordSet.EOF cn_full=objRecordSet.Fields("distinguishedName").value intCounter = intCounter + 1 objRecordSet.MoveNext Loop cn1=split(cn_full,"OU=") ou=split(cn1(1),",") ‘##################################################################### ‘##################################################################### ‘Neste local, o script abre o arquivo impressoras.txt e faz a leitura do mesmo para o mapeamento das impressoras. ‘O arquivo deve estar no mesmo local onde o script está rodando ‘Mude o nome do servidor de impressão para o nome do servidor de impressão da sua rede ‘##################################################################### Set ObjScript = CreateObject("Scripting.FileSystemObject") Set Texto = ObjScript.OpenTextFile("impressoras.txt") setor="[" & ou(0) & "]" dim x dim LinhaTexto(100) dim Linhaprojeto(100) Do LinhaTexto(x) = Texto.ReadLine x=x+1 Loop Until texto.atendofstream = true Texto.Close do while cont<=ubound(LinhaTexto) if LinhaTexto(cont) <> "" then if LinhaTexto(cont) = setor then cont2=cont do while cont2<=ubound(LinhaTexto) if LinhaTexto(cont2) <> "" then if LinhaTexto(cont2) <> setor then if LinhaTexto(cont2) <> "[fim]" then net.AddWindowsPrinterConnection "\\nome do servidor de impressão\" &LinhaTexto(cont2) wscript.echo LinhaTexto(cont2) end if end if if LinhaTexto(cont2) = "[fim]" then exit do end if end if cont2=cont2+1 loop end if end if cont=cont+1 loop ‘##################################################################### ‘O arquivo impressoras.txt deve ter esta estrutura (sem apóstrofe no inicio): ‘[setor] ‘Impressora1 ‘Impressora2 ‘[fim] ‘[setor2] ‘Impressora3 ‘Impressora4 ‘[fim] ‘Obs.: O nome do setor deve ser igual ao nome da Unidade Organizacional (OU) no Active Directory. ‘##################################################################### ‘Inicia procedimentos para as máquinas específicas de teste ‘Aqui definimos as máquinas que têm características especiais, como ícones e mapeamentos que as demais não têm. ‘O conteúdo do arquivo deve ter o nome das máquinas, um por linha, todos em maiúsculo. ‘##################################################################### x=0 cont=0 Set Texto = ObjScript.OpenTextFile("maquinas_teste.txt") Do linhaprojeto(x) = Texto.ReadLine x=x+1 Loop Until texto.atendofstream = true Texto.Close do while cont<=ubound(linhaprojeto) if Linhaprojeto(cont) <> "" then if Linhaprojeto(cont) = NomeComputador then ‘drive específico das máquinas de teste If unidades.DriveExists("x:") Then Net.RemoveNetworkDRIVE "x:", True, True Net.MapNetworkDrive "x:", "\\maquina\pasta_compartilhada",true objShell.NameSpace("x:").Self.Name = "Arquivos" else Net.MapNetworkDrive "x:", "\\maquina\pasta_compartilhada ",true objShell.NameSpace("x:").Self.Name = "Arquivos" end if end if cont=cont+1 loop ‘##################################################################### ‘##################################################################### ‘Opções para todos os usuários ‘##################################################################### If unidades.DriveExists("z:") Then Net.RemoveNetworkDRIVE "z:", True, True Net.MapNetworkDrive "z:", "\\maquina\pasta_compartilhada",true objShell.NameSpace("z:").Self.Name = "Arquivos" else Net.MapNetworkDrive "z:", "\\maquina\pasta_compartilhada ",true objShell.NameSpace("z:").Self.Name = "Arquivos" end if ‘copiar ícone para a área de trabalho fso.copyfile "\\dominio\NETLOGON\icones\icone.lnk", strUserProfile&"/desktop/", "true" ‘##################################################################### ‘Sair do script Wscript.Quit A criação do script é fácil, apenas crie um arquivo com o conteúdo e salve com a extensão .VBS dentro da pasta netlogon do servidor do Active Directory. Defina o script de logon do usuário em Active Directory Users and Computers, nas ferramentas administrativas. Selecione o usuário e entre nas propriedades do mesmo, na guia Profile, coloque, na caixa Logon Script, o nome do arquivo .VBS criado. |
sexta-feira, 28 de dezembro de 2012
Script de Logon
Assinar:
Postagens (Atom)