Script para voltar contas expiradas

Olá,

vou escrever hoje sobre um problema que me fez trabalhar duas horas a mais ontem testando uma solução caseira.

Um cliente da empresa que trabalho teve um problema e, de uma hora para outra, boa parte das contas do AD teve sua senha expirada. O problema foi simples: alguém configurou por acidente a política de troca de senhas de 90 dias (padrao da empresa) para 30 dias.

Resolver o problema foi fácil. Difícil foi a lógica.

Eu simplesmente abri o AD Explorer e fui caçar a propriedade no objeto dos usuários no AD que eu deveria alterar. Simplesmente não encontrei nenhuma.

O que isso quer dizer? Na prática, não fica no usuário a propriedade que diz se a senha do usuário expirou ou não. A única data relevante que fica armazenada é a data da troca da senha pela última vez (pwdLastSet). O Windows então faz a conta, no momento do logon, para descobrir se o usuário deve ou não trocar a senha naquele instante. Sendo assim, não seria necessário alterar usuário algum, muito menos fazer script para varrer o AD e definir alguma propriedade novamente.

Sendo assim, fiz alguns testes e comprovei minha tese. O único problema que pode ocorrer é o DC demorar demais para puxar novamente a política padrão do domínio, mas é altamente aceitável esse lag.

Isso remonta a seguinte história:

Um navio carregado de ouro, revestido de todo o cuidado e segurança
atravessava o oceano quando, de repente, o motor enguiçou".
Imediatamente, o comandante mandou chamar o técnico do porto mais próximo.
O técnico chegou de helicóptero e trabalhou durante uma semana, porém sem
resultados concretos.
Chamaram então o melhor engenheiro naval do país.
O engenheiro trabalhou três dias inteiros, sem descanso, mas nada
conseguiu.
O navio continuava enguiçado.
A empresa proprietária do navio mandou, então, buscar o maior especialista
do mundo naquele tipo de motor.
Ele chegou, olhou detidamente a casa das máquinas, escutou o barulho do
vapor, apalpou a tubulação e, abrindo a sua valise, retirou um pequeno
martelo.
Deu uma martelada em uma válvula vermelha (que estava emperrada) e guardou o martelo de volta na valise.
Mandou ligar o motor e este funcionou perfeitamente na primeira tentativa.
Dias depois, chegaram às contas ao escritório da empresa de navegação.
Por uma semana de trabalho, o técnico cobrou US$ 700.
O engenheiro naval cobrou, por três dias de trabalho, US$ 900.
Já o especialista, por sua vez, cobrou US$ 10,000.00 pelo serviço.
Atônito com esta última conta, o Diretor Financeiro da empresa enviou um
telegrama ao especialista, perguntando:
"Como você chegou a esse valor de US$ 10,000.00, por cerca de 1 minuto de
trabalho e uma única martelada?".
O especialista, então, enviou as seguintes especificações, no cálculo dos
seus honorários profissionais à empresa :
- Por dar uma martelada........................................ US$ 1.00
- Por saber exatamente onde bater o martelo....... US$ 9.999,00
O que vale, na prática, não é dar a martelada, mas saber onde bater o
martelo.
A martelada você pode até delegar para outro...

Ok, não sou um especialista a ponto de resolver em um minuto o problema… mas a análise toda, incluindo formulação, labs e produção levou apenas duas horas.

Outro dia coloco aqui como eu faria se precisasse de script para isso.

Links:

http://live.sysinternals.com/adexplorer.exe

http://scyllamazzillo.multiply.com/market/item/5

PS: havia sim a possibilidade de todos os campos pwdLastSet dos usuários terem sido alterados propositalmente ou via script, mas não era esse o caso. Se fosse, eu teria que obrigatoriamente usar um script para consertar ou um dsquery | dsmod.

Até logo!

Categorias dessa postagem:

Comentários