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:
- Tarefas agendadas (normalmente o backup é feito aqui)
- Serviços
- 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
Comentários
Postar um comentário
Anônimo : "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]
Unknown : 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]