Usuário com melhor resposta
Script para Shutdown pela Rede

Pergunta
-
Boas
Fiz um arquivo .bat simples para desligar as maquinas pela rede. Até ai tudo bem, mas o problema é que se alguma estação estiver desligada, ele demora muito esperando uma resposta pra poder ir para a proxima linha e desligar a proxima maquina, e se a proxima estiver desligada tambem, la vai mais demora.
Precisava de algo que enviasse o comando simultaneamente para todas as maquinas do script, sem verificação se esta desligada ou nao.
Estou usando a seguinte linha: shutdown /s /f /m \\tcl80 /c "Desligamento Automatico - Salve seu trabalho imediatamente"
Usei alguns scripts aqui do forum, que funcionam perfeitamente, mas eu preciso da mensagem avisando o desligamento.
Como o script do Tiago Souza nesse link: http://social.technet.microsoft.com/Forums/pt-BR/winsrv2003pt/thread/20723a85-c7b8-43db-873f-0a1876f6852b
Talvez ele mesmo resolvesse, mas precisa ter onde colocar a mensagem com o motivo do desligamento. E nao entendo nada de programação.
Abraço.
MCP
Respostas
-
Ele Agora aparece o comando shutdown /s /f /m \\"& strHost &" /c Desligamento Automatico - Salve seu trabalho imediatamente
e depois mostra o FIM.
Mas ainda nao desliga.
Abraço.
MCP
Eu sei.....
'Ping terminais listados em txt e executa caso ping ok
'Forum scripts administrativosData = Date()
DtAt = Split(data,"/",-1)
DataLog = DtAt(0)&DtAt(1)&DtAt(2)
'Local do arquivo de LOG
TempFilename = "./Logshutdown "&DataLog&".txt"'Lista dos computadores
strComputadores = "c:\Computadores.txt"'Cria objetos
Set objFSO = createobject("scripting.filesystemobject")
Set Arquivo = objFSO.CreateTextFile(Tempfilename)
Set Arq = objFSO.OpenTextFile(strcomputadores,1)
Set WshShell = WScript.CreateObject("WScript.Shell")
DO until arq.atEndOfStreamOn Error Resume Next
strOPing = Ping(arq.readline)
strHost = arq.readlineif strOPing = True then
'WSHShell.Run "shutdown -m \\" & strHost , 1, false
WSHShell.Run "shutdown /s /f /m \\"& strHost &" /c Desligamento Automatico - Salve seu trabalho imediatamente"
arquivo.writeline "Terminal " & strHost & " encontrado, enviado comando de desligar as " & Time()
Else
'Wscript.Echo "Ping OFF"
arquivo.writeline "Terminal " & strHost & " não pode ser encontrado"
end ifLoop
Arq.close()
Wscript.echo "Fim"
'--------------------------------
'Função Ping via WMI
'--------------------------------
Function Ping(strHost)dim objPing, objRetStatus
set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery _
("select * from Win32_PingStatus where address = '" & strHost & "'")for each objRetStatus in objPing
if IsNull(objRetStatus.StatusCode) or objRetStatus.StatusCode <> 0 then
Ping = False
else
Ping = True
end if
next
End Function
Agora ja testado aqui...
Efetue alguns outros testes como:
Rodar a linha manualmente...
shutdown /s /f /m \\COMPUTADOR /c Desligamento Automatico - Salve seu trabalho imediatamente"
e ver se ele desliga...
Poste os resultados!
" Qm tem boca vai a roma, meu fogão tem 6 e não saiu da cozinha ainda"- Marcado como Resposta Anderson Vizoto quinta-feira, 17 de dezembro de 2009 22:00
Todas as Respostas
-
Boas
Fiz um arquivo .bat simples para desligar as maquinas pela rede. Até ai tudo bem, mas o problema é que se alguma estação estiver desligada, ele demora muito esperando uma resposta pra poder ir para a proxima linha e desligar a proxima maquina, e se a proxima estiver desligada tambem, la vai mais demora.
Precisava de algo que enviasse o comando simultaneamente para todas as maquinas do script, sem verificação se esta desligada ou nao.
Estou usando a seguinte linha: shutdown /s /f /m \\tcl80 /c "Desligamento Automatico - Salve seu trabalho imediatamente"
Usei alguns scripts aqui do forum, que funcionam perfeitamente, mas eu preciso da mensagem avisando o desligamento.
Como o script do Tiago Souza nesse link: http://social.technet.microsoft.com/Forums/pt-BR/winsrv2003pt/thread/20723a85-c7b8-43db-873f-0a1876f6852b
Talvez ele mesmo resolvesse, mas precisa ter onde colocar a mensagem com o motivo do desligamento. E nao entendo nada de programação.
Abraço.
MCP
Anderson, bom dia.
No prórprio forum tem uma solução mais completa...
O fluxo é I ------ PING IP ------- IF TRUE ------- ENVIA COMANDO
O link....
http://social.technet.microsoft.com/Forums/pt-BR/scriptadminpt/thread/205238e1-b684-4cf6-9f84-ed232d0d46d5
Veja se ajuda...assim faria o desligamento mais rapido...selecionando os terminais que ele iria desligar.
Além disso possui um log para analise/sanções (que no caso o usuário precisava).
Poste os resultados!Se útil classifique!
[]s,
" Qm tem boca vai a roma, meu fogão tem 6 e não saiu da cozinha ainda" -
Perfeito.
Não tinha visto aquele topico... falha minha.
Mas percebi que o script ta desligando por range de IP, nao é isso?
Eu precisava que fosse pelo nome das maquinas, pq nem todas na faixa de IP vao ser desligadas.
E pelo .bat o comando demora muito tempo para ser concluido.
Abraço.
MCP -
Perfeito.
Não tinha visto aquele topico... falha minha.
Mas percebi que o script ta desligando por range de IP, nao é isso?
Eu precisava que fosse pelo nome das maquinas, pq nem todas na faixa de IP vao ser desligadas.
E pelo .bat o comando demora muito tempo para ser concluido.
Abraço.
MCP
No problem.....
Altere os campos em negrito conforme necessidade.
Atualemente ele vai obter os dados de um TXT com isso vc deverá criar uma lista para tal.
'Ping terminais listados em txt e executa caso ping ok
'Forum scripts administrativosData = Date()
DtAt = Split(data,"/",-1)
DataLog = DtAt(0)&DtAt(1)&DtAt(2)
'Local do arquivo de LOG
TempFilename = "./Logshutdown "&DataLog&".txt"'Lista dos computadores
strComputadores = "c:\Computadores.txt"'Cria objetos
Set objFSO = createobject("scripting.filesystemobject")
Set Arquivo = objFSO.CreateTextFile(Tempfilename)
Set Arq = objFSO.OpenTextFile(strcomputadores,1)DO until arq.atEndOfStream
strOPing = Ping(arq.readline)
strHost = arq.readlineif strOPing = True then
'WSHShell.Run "shutdown -m \\" & strHost , 1, false
arquivo.writeline "Terminal " & strHost & " encontrado, enviado comando de desligar as " & Time()
Else
'Wscript.Echo "Ping OFF"
arquivo.writeline "Terminal " & strHost & " não pode ser encontrado"
end ifLoop
Arq.close()
Wscript.echo "Fim"
'--------------------------------
'Função Ping via WMI
'--------------------------------
Function Ping(strHost)dim objPing, objRetStatus
set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery _
("select * from Win32_PingStatus where address = '" & strHost & "'")for each objRetStatus in objPing
if IsNull(objRetStatus.StatusCode) or objRetStatus.StatusCode <> 0 then
Ping = False
else
Ping = True
end if
next
End Function'------------
Efetue os testes e poste os resultados! Se útil classifique!
[]s,
" Qm tem boca vai a roma, meu fogão tem 6 e não saiu da cozinha ainda" -
Olá!
Cara, criei o arquivo txt, tudo certo, mas recebo um erro quando executo.
Linha 23
Char 1
Error Input past end of file
Code 800A003E
Fiz algo errado?
Coloquei o nome do computador na segunda linha do txt, e o script termina, mas nao ta desligando a maquina.
MCP- Editado Anderson Vizoto quinta-feira, 17 de dezembro de 2009 13:47
-
Olá!
Cara, criei o arquivo txt, tudo certo, mas recebo um erro quando executo.
Linha 23
Char 1
Error Input past end of file
Code 800A003E
Fiz algo errado?
MCP
Vc cadastrou os computadores?
Comp1
Comp2
Comp3
Isso indica que ele passou do final do arquivo.
Coloque um "on error resume next"
Entre o DO e o LOOP.
[]s,
" Qm tem boca vai a roma, meu fogão tem 6 e não saiu da cozinha ainda" -
-
Sim, Recebo a mensagem FIM. Inclusive ele gera o log: Terminal acaba02 encontrado, enviado comando de desligar as 10:54:33 Mas nada é enviado.
MCP
Sim, a linha está comentada.....o correto é vc colocar conforme sua necessidade. Segue exemplo.
'Ping terminais listados em txt e executa caso ping ok
'Forum scripts administrativosData = Date()
DtAt = Split(data,"/",-1)
DataLog = DtAt(0)&DtAt(1)&DtAt(2)
'Local do arquivo de LOG
TempFilename = "./Logshutdown "&DataLog&".txt"'Lista dos computadores
strComputadores = "c:\Computadores.txt"'Cria objetos
Set objFSO = createobject("scripting.filesystemobject")
Set Arquivo = objFSO.CreateTextFile(Tempfilename)
Set Arq = objFSO.OpenTextFile(strcomputadores,1)DO until arq.atEndOfStream
On Error Resume Next
strOPing = Ping(arq.readline)
strHost = arq.readlineif strOPing = True then
'WSHShell.Run "shutdown -m \\" & strHost , 1, false
WSHShell.Run "shutdown /s /f /m \\"& strHost &"/c Desligamento Automatico - Salve seu trabalho imediatamente"
arquivo.writeline "Terminal " & strHost & " encontrado, enviado comando de desligar as " & Time()
Else
'Wscript.Echo "Ping OFF"
arquivo.writeline "Terminal " & strHost & " não pode ser encontrado"
end ifLoop
Arq.close()
Wscript.echo "Fim"
'--------------------------------
'Função Ping via WMI
'--------------------------------
Function Ping(strHost)dim objPing, objRetStatus
set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery _
("select * from Win32_PingStatus where address = '" & strHost & "'")for each objRetStatus in objPing
if IsNull(objRetStatus.StatusCode) or objRetStatus.StatusCode <> 0 then
Ping = False
else
Ping = True
end if
next
End Function'------------
Tente agora e poste os resultados....
[]s,
" Qm tem boca vai a roma, meu fogão tem 6 e não saiu da cozinha ainda" -
-
Amigo, desculpa, mas ainda nao esta funcionando.
Aparece FIM, mas é como se nada fosse enviado para estação.
MCP
'Ping terminais listados em txt e executa caso ping ok
'Forum scripts administrativosData = Date()
DtAt = Split(data,"/",-1)
DataLog = DtAt(0)&DtAt(1)&DtAt(2)
'Local do arquivo de LOG
TempFilename = "./Logshutdown "&DataLog&".txt"'Lista dos computadores
strComputadores = "c:\Computadores.txt"'Cria objetos
Set objFSO = createobject("scripting.filesystemobject")
Set Arquivo = objFSO.CreateTextFile(Tempfilename)
Set Arq = objFSO.OpenTextFile(strcomputadores,1)
Set WshShell = WScript.CreateObject("WScript.Shell")
DO until arq.atEndOfStream'On Error Resume Next
strOPing = Ping(arq.readline)
strHost = arq.readlineif strOPing = True then
'WSHShell.Run "shutdown -m \\" & strHost , 1, false
WSHShell.Run "shutdown /s /f /m \\"& strHost &" /c Desligamento Automatico - Salve seu trabalho imediatamente"
arquivo.writeline "Terminal " & strHost & " encontrado, enviado comando de desligar as " & Time()
Else
'Wscript.Echo "Ping OFF"
arquivo.writeline "Terminal " & strHost & " não pode ser encontrado"
end ifLoop
Arq.close()
Wscript.echo "Fim"
'--------------------------------
'Função Ping via WMI
'--------------------------------
Function Ping(strHost)dim objPing, objRetStatus
set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery _
("select * from Win32_PingStatus where address = '" & strHost & "'")for each objRetStatus in objPing
if IsNull(objRetStatus.StatusCode) or objRetStatus.StatusCode <> 0 then
Ping = False
else
Ping = True
end if
next
End Function'------------
Verifique esse, informe se der algum erro......
[]s,
" Qm tem boca vai a roma, meu fogão tem 6 e não saiu da cozinha ainda"- Editado Marcellus Bockorny quinta-feira, 17 de dezembro de 2009 15:29 WSHShell.Run errado
-
-
Ele Agora aparece o comando shutdown /s /f /m \\"& strHost &" /c Desligamento Automatico - Salve seu trabalho imediatamente
e depois mostra o FIM.
Mas ainda nao desliga.
Abraço.
MCP
Eu sei.....
'Ping terminais listados em txt e executa caso ping ok
'Forum scripts administrativosData = Date()
DtAt = Split(data,"/",-1)
DataLog = DtAt(0)&DtAt(1)&DtAt(2)
'Local do arquivo de LOG
TempFilename = "./Logshutdown "&DataLog&".txt"'Lista dos computadores
strComputadores = "c:\Computadores.txt"'Cria objetos
Set objFSO = createobject("scripting.filesystemobject")
Set Arquivo = objFSO.CreateTextFile(Tempfilename)
Set Arq = objFSO.OpenTextFile(strcomputadores,1)
Set WshShell = WScript.CreateObject("WScript.Shell")
DO until arq.atEndOfStreamOn Error Resume Next
strOPing = Ping(arq.readline)
strHost = arq.readlineif strOPing = True then
'WSHShell.Run "shutdown -m \\" & strHost , 1, false
WSHShell.Run "shutdown /s /f /m \\"& strHost &" /c Desligamento Automatico - Salve seu trabalho imediatamente"
arquivo.writeline "Terminal " & strHost & " encontrado, enviado comando de desligar as " & Time()
Else
'Wscript.Echo "Ping OFF"
arquivo.writeline "Terminal " & strHost & " não pode ser encontrado"
end ifLoop
Arq.close()
Wscript.echo "Fim"
'--------------------------------
'Função Ping via WMI
'--------------------------------
Function Ping(strHost)dim objPing, objRetStatus
set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery _
("select * from Win32_PingStatus where address = '" & strHost & "'")for each objRetStatus in objPing
if IsNull(objRetStatus.StatusCode) or objRetStatus.StatusCode <> 0 then
Ping = False
else
Ping = True
end if
next
End Function
Agora ja testado aqui...
Efetue alguns outros testes como:
Rodar a linha manualmente...
shutdown /s /f /m \\COMPUTADOR /c Desligamento Automatico - Salve seu trabalho imediatamente"
e ver se ele desliga...
Poste os resultados!
" Qm tem boca vai a roma, meu fogão tem 6 e não saiu da cozinha ainda"- Marcado como Resposta Anderson Vizoto quinta-feira, 17 de dezembro de 2009 22:00
-
Boa Tarde!
Fiz uma pequena mudança na linha 31 e funcionou perfeitamente.
ficou assim: WSHShell.Run "shutdown /s /f /m \\"& strHost &" /c ""Desligamento automático - Salve seu trabalho imediatamente"
Vou fazer o teste em massa agora.
Abraço!
MCP -
Boa Tarde!
Fiz uma pequena mudança na linha 31 e funcionou perfeitamente.
ficou assim: WSHShell.Run "shutdown /s /f /m \\"& strHost &" /c ""Desligamento automático - Salve seu trabalho imediatamente"
Vou fazer o teste em massa agora.
Abraço!
MCP
Perfeito, após isso por favor poste os resultados! E se útil classifique!
[]s,
" Qm tem boca vai a roma, meu fogão tem 6 e não saiu da cozinha ainda" -
Não funcionou!
Ja to ficando com raiva disso...
O arquivo txt precisa ter algo diferente? Pode ser um abaixo do outro? precisa pular linha?
Lembrando que com uma maquina so o script funciona...
Edit: Fiz algumas mudanças e vou testar novamente, voltarei com os resultados!
Funcionou!
Era realmente o arquivo txt errado. Precisa pular a primeira linha, e depois ir pulando uma linha a cada nome de computador.
Obrigado pela ajuda Marcellus!
Grande Abraço.
MCP