Imagine a situação: No AD de uma empresa, várias contas de usuários estão configurados para a senha não expirar (por política antiga, por falta de política, por qualquer motivo), por uma questão de segurança é necessário que esses usuários passem a trocar a senha de acordo com a política de senha, mas se apenas configurar que a senha expira a maioria das pessoas não vão conseguir usar a rede pois a senhas que usam já são muito antigas e estarão fora do prazo de validade. Achou familiar? Aqui falaremos sobre como contornar esse problema (que existe em muitas empresas) da maneira menos impactante, ao nosso entendimento.

Com um script simples, vamos listar as contas que estão ativas com a senha que não expira, para essas contas iremos alterar a data da senha para a data atual e em seguida colocar para a senha expirar, apesar da senha ainda ser antiga, será como se o usuário tivesse definido essa senha hoje e terá o prazo normal para trocar sua senha, tendo tempo para se adaptar à regra.

Parar criar o script, abra o notepad, crie um arquivo com a extensão .vbs e insira o conteúdo abaixo alterando as variáveis (que deixaremos em cinza) conforme a necessidade (e usando atributos Distinguished Name, caso não saiba como obter verifique aqui, ou nas referências no final). Lembramos que o script deverá ser executado por uma conta com permissão administrativa ao AD:

'********************************************************************************
 ' ESTE SCRIPT IRÁ SE CONECTAR NA "OU" E DOMINIO QUE VC ESPECIFICAR NAS VARIAVEIS
 ' VAI PEGAR APENAS OS USUARIOS ATIVOS E QUE A SENHA NAO EXPIRA
 ' E VAI ALTERAR A DATA DA ULTIMA TROCA DE SENHA (COLOCANDO A DATA ATUAL)
 ' E ALTERAR PARA QUE A SENHA EXPIRE NORMALMENTE
 ' FONTE: nvlan.com.br
'********************************************************************************
Option Explicit
Dim adoCommand, adoConnection, adoRecordset, strDN, objUser, intCounter, DN_DOMAIN, DN_OU
intCounter = 0
Set adoCommand = CreateObject("ADODB.Command")
Set adoConnection = CreateObject("ADODB.Connection")
adoConnection.Provider = "ADsDSOObject"
adoConnection.Open "Active Directory Provider"
Set adoCommand.ActiveConnection = adoConnection
'********************************************************************************
' VARIAVEIS (ALTERE CONFORME A NECESSIDADE)
'********************************************************************************
'Na variavel abaixo, coloque o DISTINGUISHED NAME da OU (veja como está o exemplo)
DN_OU="OU=Users"
'Na variavel abaixo, coloque o DISTINGUISHED NAME do seu dominio (veja como está o exemplo)
DN_DOMAIN="DC=SEUDOMINIO,DC=COM,DC=BR"
'********************************************************************************
' INICIO DO SCRIPT
'********************************************************************************
adoCommand.CommandText = "<LDAP://"& DN_OU &","& DN_DOMAIN &">;(&(objectCategory=person)(objectClass=user));distinguishedName;subtree"
adoCommand.Properties("Page Size") = 5000
adoCommand.Properties("Timeout") = 30
adoCommand.Properties("Cache Results") = False
Set adoRecordset = adoCommand.Execute
Do Until adoRecordset.EOF
      strDN = adoRecordset.Fields("distinguishedName").Value
      Set objUser = GetObject("LDAP://" & strDN)
      If ( objUser.userAccountControl=66048 ) Then
            intCounter = intCounter +1
            objUser.pwdLastSet = 0
            objUser.SetInfo
            objUser.pwdLastSet = "-1"
            objUser.SetInfo
            objUser.userAccountControl = 512
            objUser.SetInfo
      End If
      adoRecordset.MoveNext
Loop
adoRecordset.Close
adoConnection.Close
wscript.echo "Alteradas "& intCounter &" contas"

Fontes/Referências

NVLAN – Como obter o Distinguished Name (DN) no Active Directory

Mais Informações

Esperamos ter ajudado da melhor forma possível e estaremos sempre a disposição para mais informações.

Entre em contato conosco pelo e-mail equipe@nvlan.com.br.

NVLAN - Consultoria