Checklist para alteração de senhas no Windows

Olá,

Aqui vão alguns scripts úteis quando for necessário trocar uma senha para uma conta em um domínio. Três lugares que devem ser checados antes de trocar uma senha (note que não são os únicos) são:

  1. Tarefas agendadas (normalmente o backup é feito aqui)
  2. Serviços
  3. Application Pools do IIS e usuários usados em acesso anônimo

Se alguma tarefa, serviço ou Application Pool estiver rodando com a conta que você precisa alterar a senha, ele com certeza vai deixar de funcionar na próxima vez que for iniciado ou quando precisar de um recurso que precise de autenticação.

Para facilitar na localização destas contas, sugiro um comando e um script:

Localizar todos os serviços e contas que estão sendo usadas neles.

wmic /node:localhost service get displayname, startname

ou no PowerShell:

gwmi win32_service –computerName estacao_ou_ip | sort startname | ft name, startname

Para listar os Application Pools e as contas usadas por eles, use o seguinte script em VBScript. Basta salvar com extensão .VBS e executar. Ele aceita o nome do computador remoto como parâmetro (opcional).

if WScript.Arguments.Count > 0 then
   strComputer= WScript.Arguments(0)
else
   strComputer = "."
end if
set objWMI = GetObject("winmgmts:\\" & strComputer & "\root\MicrosoftIISv2")
set colAppPools = objWMI.ExecQuery("Select * from IISApplicationPoolSetting")
for each app in colAppPools
   wscript.echo "AppPoolName: " & app.Name
   wscript.echo "AppPoolUser: " & app.WAMUserName
   wscript.echo
next

As contas usadas para acesso anônimo no IIS também devem ser verificadas:

if WScript.Arguments.Count > 0 then
   strComputer= WScript.Arguments(0)
else
   strComputer = "."
end if
set objWMI = GetObject("winmgmts:\\" & strComputer & "\root\MicrosoftIISv2")

set objDic = CreateObject("Scripting.Dictionary")
set websites = objWMI.ExecQuery("Select * from IISWebServerSetting")
for each website in websites
    objDic.Add right(website.name, len(website.name) - instrrev(website.name,"/")), website.servercomment
next

set colAppPools = objWMI.ExecQuery("Select * from IISWebDirectorySetting")
for each app in colAppPools
    print_obj app
next

set colAppPools = objWMI.ExecQuery("Select * from IISWebVirtualDirSetting")
for each app in colAppPools
    print_obj app
next

sub print_obj(app)
    ini = instr(app.name,"/")
    fim = instr(ini+1, app.name, "/")
    tag = mid(app.name, ini+1, fim-ini-1)
    wscript.echo "SiteName: " & objdic.item(tag)
    wscript.echo "Fullname: " & app.name
    wscript.echo "AppPoolUser: " & app.AnonymousUserName
    wscript.echo
end sub

Não é possível obter contas de usuário usadas em tarefas agendadas usando WMI/at (rodam com conta localsystem) ou pelo schtasks. Essa verificação deve ser manual, abrindo as propriedades de cada uma das tarefas que aparecem na interface (http://www.microsoft.com/technet/scriptcenter/guide/sas_man_lpja.mspx?mfr=true e http://www.microsoft.com/technet/scriptcenter/resources/qanda/sept04/hey0922.mspx). As coisas só mudam no Windows Vista e 2008.

Ah, a troca da senha também pode ser feita via script, claro =). Mas isso é só procurar aqui mesmo no site que já tem pronto.

[]s,

Vinicius Canto

Categorias dessa postagem: , , ,

Comentários

Newton Matos : "Não é possível obter contas de usuário usadas em tarefas agendadas"

Eu discordo!! TRUCO!!!

schtasks /query /fo list /v

E pegar o campo RUNAS [27/8/08 11:40 - link]

Thiago Andrade : Boa tarde Vinicius.
Tudo Bem.
Primeiramente parabéns pelo Blog. Realmente muito bom.
Estava precisando de um script para alterar a senha do administrador local das estações em minha empresa. Pode me ajudar? Todas as estações estão em domínio e utilizamos AD. Tenho um script que funciona, o problema é que para executá-lo o user precisa ser adm. Talvez até já tenha em seu blog, mas eu não encontrei.
Desde já obrigado.
Thiago Andrade
tmandrade@gmail.com [23/9/08 16:40 - link]

Vinicius Canto : Verdade... tem um parâmetro no schtasks que mostra usuários em tarefas agendadas sim.

tks Newton! [12/1/09 21:53 - link]