none
Script para Shutdown pela Rede RRS feed

  • 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
    quinta-feira, 17 de dezembro de 2009 11:36

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 administrativos

    Data = 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.readline

    if 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 if

    Loop

    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
    quinta-feira, 17 de dezembro de 2009 15:32

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"
    quinta-feira, 17 de dezembro de 2009 11:54
  • 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
    quinta-feira, 17 de dezembro de 2009 12:19
  • 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 administrativos

    Data = 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.readline

    if 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 if

    Loop

    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"
    quinta-feira, 17 de dezembro de 2009 13:04
  • 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
    quinta-feira, 17 de dezembro de 2009 13:41
  • 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"
    quinta-feira, 17 de dezembro de 2009 13:43
  • 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
    quinta-feira, 17 de dezembro de 2009 13:57
  • 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 administrativos

    Data = 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.readline

    if 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 if

    Loop

    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"
    quinta-feira, 17 de dezembro de 2009 14:00
  • Amigo, desculpa, mas ainda nao esta funcionando.

    Aparece FIM, mas é como se nada fosse enviado para estação.
    MCP
    quinta-feira, 17 de dezembro de 2009 14:32
  • 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 administrativos

    Data = 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.readline

    if 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 if

    Loop

    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
    quinta-feira, 17 de dezembro de 2009 15:23
  • 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
    quinta-feira, 17 de dezembro de 2009 15:28
  • 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 administrativos

    Data = 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.readline

    if 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 if

    Loop

    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
    quinta-feira, 17 de dezembro de 2009 15:32
  • 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
    quinta-feira, 17 de dezembro de 2009 17:11
  • 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"
    quinta-feira, 17 de dezembro de 2009 17:41
  • 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
    quinta-feira, 17 de dezembro de 2009 20:40