COLUNA TECHNET

Dd569813.ImgFotoColuna(pt-br,TechNet.10).jpg Francisco Baddini é engenheiro eletrônico Microsoft MCSE e Compaq ASE, responsável pelas revisões técnicas do Portal Technet Brasil, autor do livro "Windows 2000 Server - Implementação & Administração", um dos poucos livros sobre este tema e consultor de TI da Konsultec Empresas, parceiro Microsoft
fbaddini@konsultec.com.br

Utilizando scripts na administração de usuários

Provavelmente você já precisou alterar algum atributo de muitos usuários (o logon script de 80 usuários, por exemplo) e acabou fazendo um a um, certo ? Serviço meio chato, não é ? E redefinir a senha de todos e solicitar que todos alterem a senha no próximo logon ? Seria interessante poder fazer isso num clique, certo ?

Utilizar scripts do Windows é a melhor forma de evitar este tipo de chateação e aumentar em muito a produtividade na administração de usuários !!

E o melhor de tudo: é relativamente simples e rápido criar scripts !

Vamos a um exemplo: o objetivo é alterar o atributo Logon script de todos os usuários em uma unidade organizacional (OU):

Exemplo de Script

Set objConnection = CreateObject("ADODB.Connection")
objConnection.Open "Provider=ADsDSOObject;"
Set objCommand = CreateObject("ADODB.Command")
objCommand.ActiveConnection = objConnection <BR>
objCommand.CommandText="<LDAP://ou=Gerencia,dc=empresa,dc=br>;" & _
"(&(objectCategory=User)(cn=*));" & _
"ADsPath;subtree"
Set objRecordSet = objCommand.Execute
While Not objRecordset.EOF
strADsPath = objRecordset.Fields("ADsPath")
Set objUser = GetObject(strADsPath)
objUser.Put "scriptPath", "login.bat"
objUser.SetInfo
objRecordSet.MoveNext
Wend
WScript.Echo objRecordSet.RecordCount & _
" usuarios modificados."
objConnection.Close

Entendendo o Script acima

O script abre uma conexão com o Active Directory e altera o atributo scriptPath (nome interno do Logon script no schema do Active Directory) para LOGIN.BAT. Apenas usuários da OU de nome Gerencia, presente no domínio empresa.br serão afetados. Ao final, uma mensagem pop-up será exibida indicando quantos usuários foram alterados.

Passo a passo, o que ocorre é o seguinte:

1) Define objetos utilizados na conexão com o Active Directory

Set objConnection = CreateObject("ADODB.Connection")
objConnection.Open "Provider=ADsDSOObject;"
Set objCommand = CreateObject("ADODB.Command")
objCommand.ActiveConnection = objConnection

2) Define qual OU será afetada e abre aconexão<BR><BR>objCommand.CommandText=_<BR>"<LDAP://ou=gerencia,dc=empresa,dc=br>;" & _
"(&(objectCategory=User)(cn=*));" & _
"ADsPath;subtree"
Set objRecordSet = objCommand.Execute

3) Faz um loop alterando o atributo em todos os usuários da OU definida na etapa 2

While Not objRecordset.EOF
strADsPath = objRecordset.Fields("ADsPath")
Set objUser = GetObject(strADsPath)
objUser.Put "scriptPath", "login.bat"
objUser.SetInfo
objRecordSet.MoveNext
Wend

4) Gera um pop-up indicando quantos usuários foram alterados e fecha a conexão

WScript.Echo objRecordSet.RecordCount & _
" usuarios modificados."
objConnection.Close

Criando os seus Scripts

Para criar os seus próprios scripts, siga as dicas abaixo:

  • A etapa 1 do script apresentado acima pode ser mantida em todos os scripts;
  • A etapa 2 deverá ser alterada conforme sua necessidade – por exemplo para um domínio xyz.br e uma OU de primeiro nível chamada Brasil, o código utilizado deveser:

<BR><BR>objCommand.CommandText=_<BR>"<LDAP://ou=Brasil,dc=xyz,dc=br>;" & _
"(&(objectCategory=User)(cn=*));" & _
"ADsPath;subtree"
Set objRecordSet = objCommand.Execute

Já se você precisar alterar o atributo de todos os usuários do domínio (no exemplo, xyz.br), o código utilizado seria:

objCommand.CommandText = _
"<LDAP://dc=xyz,dc=br>;" & _
"(&(objectCategory=User)(cn=*));" & _
"ADsPath;subtree"
Set objRecordSet = objCommand.Execute

No caso de uma OU de segundo nível (por exemplo, uma OU chamada Gerencia que tem como pai uma OU chamada Brasil, que é primeiro nível do domínio xyz.br), ficaria da seguinte forma:

objCommand.CommandText = _
"<LDAP://ou=Gerencia,ou=Brasil,dc=xyz,dc=br>;" & _
"(&(objectCategory=User)(cn=*));" & _
"ADsPath;subtree"
Set objRecordSet = objCommand.Execute

  • A etapa 3 define o atributo que será alterado, e o valor que será aplicado a este atributo. Você pode alterar vários atributos de uma só vez. Veja abaixo alguns atributos que podem ser utilizados.

While Not objRecordset.EOF
strADsPath = objRecordset.Fields("ADsPath")
Set objUser = GetObject(strADsPath)
<…APAGUE ESTA LINHA E INSIRA OS ATRIBUTOS DESEJADOS CONFORME ABAIXO …>
objUser.SetInfo
objRecordSet.MoveNext
Wend

Atributo Valor Utilize…x
Nome
João
objUser.Put "givenName", "João"
Inicial do Segundo nome
S.
objUser.Put "initials", "S."
Sobrenome
Silva
objUser.Put "sn", "Silva"
Nome de exibição
João Silva
objUser.Put "displayName", "João Silva"
Escritório
sala 402
objUser.Put "physicalDeliveryOfficeName", "Sala 402"
Telefone
(11) 1234-1234
objUser.Put "telephoneNumber", "(11)1234-1234"
Email
joao@silva.com.br
objUser.Put "mail", "joao@silva.com.br"
Web Site
http://www.xyz.com.br
objUser.Put "wWWHomePage", "http://www.xyz.com.br"
Perfil
\\servidor\share
objUser.Put "profilePath", "\\servidor\share"
Logon script
login.bat
objUser.Put "scriptPath", "login.bat"
Home Directory
\\servidor\share
objUser.Put "homeDirectory", "\\servidor\share"
Unidade para home directory
U:
objUser.Put "homeDrive", "U"
Usuário deve alterar a senha no próximo logon
Habilitar (True)
objUser.Put "pwdLastSet", 0
Senha
TechnetXyz@12
objUser.SetPassword TechnetXyz@12

Dica

Outros atributos (e outros scripts) podem ser encontrados no Script Center do Technet americano, em https://www.microsoft.com/technet/scriptcenter (site em inglês).

  • A etapa 4 também pode ser mantida – você será informado sobre o número de usuários alterados.

Pronto – basta utilizar o Bloco de Notas com o conteúdo acima e salvar o arquivo com extensão VBS. Execute o arquivo preferencialmente em um controlador de domínio e pronto – espero que você economize muito tempo e trabalho repetitivo com estes scripts !

IMPORTANTE

Todo cuidado é pouco quando utilizar scripts – lembre-se que um simples clique pode lhe ajudar em muito, mas também pode lhe complicar a vida também, se algum engano ocorrer. A dica é criar uma OU de teste e aplicar o script nesta OU, antes de aplicá-los em produção.

Grande abraço e até a próxima,

Engº. Francisco Baddini
fbaddini@wintecnologia.com.br