Dicas úteis sobre Scripts de Logon - Parte 1

Por Vinicius Canto

Olá pessoal!

Depois de responder várias questões relacionadas ao tema Script de Logon nos fóruns da Microsoft, resolvi dar continuidade à coluna e escrevendo sobre este assunto agora.

Um script de logon nada mais é do que uma rotina que é executada pelos usuários durante o processo de logon, feita exclusivamente para fazer alterações no ambiente do usuário. Ocorre na última fase do processo, após carregar os dados do perfil do usuário, ler o registro do usuário (arquivo user.dat) e processamento das diretivas de grupo.

Veja abaixo alguns detalhes importantes que você deve ter em mente ao criar um script de logon.

Credenciais e Direitos de usuário

Aqui temos um problema comum com scripts em geral, especialmente quando se trata de script de logon. Como o próprio nome diz, são executados durante o processo de logon e, portanto, são executados utilizando as credenciais do usuário que está efetuando logon no momento.

Assim, o script pode executar somente as tarefas que o usuário também poderia fazer manualmente, como mapeamento de pastas, impressoras, criação de atalhos no Desktop, definição de opções em programas específicos, exibir mensagens, etc. Outro detalhe importante é que todas as modificações feitas por um script de logon podem ser desfeitas manualmente pelo usuário, uma vez que ele tem os mesmos 'poderes' que o script.

Utilizando este raciocínio, utilizando scripts de logon é possível escrever qualquer chave do registro que fique abaixo de HKEY_CURRENT_USER, mas em nenhuma que esteja abaixo de HKEY_LOCAL_MACHINE. Todo o conteúdo abaixo desta chave só pode ser alterado por usuários com poderes administrativos.

Podemos concluir também que não é possível gravar nem modificar nenhum arquivo em pastas que o usuário não tenha permissão NTFS que permita escrita. Isto inclui a pasta Windows e Arquivos de Programas. Não é possível também modificar serviços, nem instalar softwares com scripts de logon.

Uma forma simples de localizar erros de permissão em scripts de logon é tentar executar o script manualmente com um usuário comum e verificar as mensagens de erro para saber onde está o problema. Se um script de logon falha, ele irá falhar também quando o usuário for executar manualmente o script.

Instalação de Softwares

Seguindo o raciocínio do item anterior, vamos comentar agora sobre instalação de softwares.

Não é recomendável instalar um software por script de logon. Para instalação de softwares existem outras técnicas como, por exemplo, a publicação/atribuição de softwares usando Diretivas de Grupo e Scripts de Inicialização. Caso a instalação possa ser feita de forma 'silenciosa' (como o MS Office ou outros que utilizem oWindows Installer), você pode ainda criar um script que execute um comando remotamente utilizando WMI e instale o aplicativo em outro computador.

Ainda que um software possa ser instalado pelo próprio usuário, tenha em mente que as credenciais dele que estarão sendo usadas. Assim, dependendo do software, você terá o trabalho adicional de modificar as permissões NTFS da pasta do programa, criar atalhos nas pastas corretas dentro do perfil All Users, modificar permissão de chaves no registro do sistema, etc. Na prática, não é viável instalar nada através de scripts de logon.

Mapeamentos

Este é um dos recursos mais utilizados em scripts de logon, e não são tão complicados de se trabalhar. Mapear uma unidade de rede nada mais é do que associar uma letra de unidade de disco à um compartilhamento localizado na rede, em um servidor de arquivos, de forma que o usuário não precise memorizar nem digitar o caminho completo do local onde seus arquivos serão salvos.

Para criar um mapeamento com o WSH, adapte o seguinte código:

Set objNet = CreateObject("Wscript.Network") 
objNet.MapNetworkDrive "K:","\\server\share"

É claro, este é o código mais básico. Você pode incrementá-lo adicionando mais linhas que façam uma checagem à quais grupos o usuário pertence e criar mapeamentos específicos de acordo com o grupo. Você pode também mapear caminhos que contenham o nome do usuário, como por exemplo "\\server\share\vinicius".

Veja os exemplos abaixo:

Set objNet = CreateObject("Wscript.Network") 
objNet.MapNetworkDrive "K:","\\server\usuarios\" & objNet.Username

Ou ainda um mais complicado, que mapeia drives de acordo com os grupos a que um usuário pertence

Set wshNet = CreateObject("WScript.Network") 
Set CurrentUser = _ 
GetObject("WinNT://domainname/" & wshNet.Username & ",user") 
For Each grp In CurrentUser.Groups 
MapDrive grp.Name 
Next 
Sub MapDrive(byval strGroupname) 
if InStr(strGroupName, "Marketing") then 
map "k:\","\\server\shareA" 
end if 
if InStr(strGroupName, "RH") then 
map "l:\","\\server\shareB" 
end if 
End Sub 
sub Map (drive, location) 
Set objNet = CreateObject("WScript.Network") 
objnet.MapNetworkDrive drive,location 
end sub

Saiba mais…

Como são vários os assuntos que os scripts de logon abrangem, decidi por dividir o conteúdo em dois artigos, com o único propósito de melhorar a leitura. No próximo, você vai aprender mais sobre Impressoras, Sistemas de Arquivos, Registro e Mensagens de Aviso.

Até mais!
Vinicius Canto