none
Script de Shutdown RRS feed

  • Pergunta

  • Boas,
    encontrei o seguinte código no proprio Site da Microsoft para efectuar o shutdown e ou reboot de máquinas via wmi:
    strComputer = "server"
    
    Set
     objWMIService = GetObject("winmgmts:"
     _
        & "{impersonationLevel=impersonate,(Shutdown)}!\\"
     & _
            strComputer & "\root\cimv2"
    )
    
    Set
     colOperatingSystems = objWMIService.ExecQuery _
        ("Select * from Win32_OperatingSystem"
    )
    
    For
     Each
     objOperatingSystem in
     colOperatingSystems
        objOperatingSystem.Win32Shutdown(1)
    Next
    
    
    
    A vantagem que encontrei neste script é que efectua o pretendido ainda que o pc esteja bloqueado com um user ou sem user logado.
    O meu objectivo é usar fazer um script que em casa de emergência correndo este script eu possa fazer o shutdown das máquinas remotamente de uma só vez sem ter que ir fisicamente ou logar-me remotamente pra tal, e como não entendo muito de programação e ou scripting queria uma ajuda de como repetir a acção para várias máquinas em somente um ficheiro. Será para correr  servidores baseado em windows 2003 Server
    Cláudio Gonçalves
    terça-feira, 14 de julho de 2009 17:26

Respostas

  • Olá,

    O script abaixo varre um arquivo texto (c:\computers.txt) e vai executando a função de desligar.


    Const ForReading = 1

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    'caminho do arquivo txt
    Set objTextFile = objFSO.OpenTextFile("C:\computers.txt",ForReading)
    Do While objTextFile.AtEndOfStream <> True
       linha = objTextFile.ReadLine
       Desligacomputer linha
    Loop


    Sub Desligacomputer(nome)

    strComputer = nome

    Set objWMIService = GetObject("winmgmts:" _
        & "{impersonationLevel=impersonate,(Shutdown)}!\\" & _
            strComputer & "\root\cimv2")

    Set colOperatingSystems = objWMIService.ExecQuery _
        ("Select * from Win32_OperatingSystem")

    For Each objOperatingSystem in colOperatingSystems
        objOperatingSystem.Win32Shutdown(1)
    Next

    End sub



    Faça os testes e nos retorne.

    Até mais,

    Jesiel

    Obs.: Se útil, classifique
    quarta-feira, 15 de julho de 2009 13:43

Todas as Respostas

  • Olá,

    Entre no prompt e digite: shutdown /i

    Adicione as maquinas e ajustes os parametros.

    Veja se te atende.




    Até mais,

    Jesiel

    Obs.: Se útil, classifique
    terça-feira, 14 de julho de 2009 20:37
  • Jesiel, boas... o comando serve sim mas como havia escrito funciona por exemplo em workstations (Ex. Windows XP) se não tiver logado, mas se tiver um user logado e a máquina bloqueada não funciona.
    No windows server 2003 se nenhum user tiver logado não funciona.
    Por isso estou à procura da solução via script.
    Cláudio Gonçalves
    quarta-feira, 15 de julho de 2009 07:47
  • Olá,

    O script abaixo varre um arquivo texto (c:\computers.txt) e vai executando a função de desligar.


    Const ForReading = 1

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    'caminho do arquivo txt
    Set objTextFile = objFSO.OpenTextFile("C:\computers.txt",ForReading)
    Do While objTextFile.AtEndOfStream <> True
       linha = objTextFile.ReadLine
       Desligacomputer linha
    Loop


    Sub Desligacomputer(nome)

    strComputer = nome

    Set objWMIService = GetObject("winmgmts:" _
        & "{impersonationLevel=impersonate,(Shutdown)}!\\" & _
            strComputer & "\root\cimv2")

    Set colOperatingSystems = objWMIService.ExecQuery _
        ("Select * from Win32_OperatingSystem")

    For Each objOperatingSystem in colOperatingSystems
        objOperatingSystem.Win32Shutdown(1)
    Next

    End sub



    Faça os testes e nos retorne.

    Até mais,

    Jesiel

    Obs.: Se útil, classifique
    quarta-feira, 15 de julho de 2009 13:43
  • Obrigado Jesiel, vou testar e já aviso o resultado.
    Cláudio Gonçalves
    quarta-feira, 15 de julho de 2009 15:10
  • Jesiel, testei o script.
    Se colocar no txt duas máquinas (foi o numero que testei) desta forma
    workstation1
    workstation2

    dá-me o seguinte erro:
    Script: "caminho do script"
    Linha: 15
    Car: 1
    Erro: O servidor remoto não existe ou não está disponivel: 'GetObject'
    Código: 800A01CE
    Origem: Erro em tempo de execução do Microsoft VBScript

    mas se correr somente com uma máquina corre normalmente.
    a linha 15 é:
    Set objWMIService = GetObject("winmgmts:" _

    Cláudio Gonçalves
    quarta-feira, 15 de julho de 2009 15:18
  • Olá,

    Eu fiz um teste aqui com 2 micros e funcinou...

    Dá uma olhada no psshutdown, acredito que ele te atende:

    http://technet.microsoft.com/en-us/sysinternals/bb897541.aspx

    Aí é só adaptar o script que te passei para executar o psshutdown por maquina.

    Se tiver dúvida poste aqui.


    Até mais,

    Jesiel

    Obs.: Se útil, classifique
    quinta-feira, 16 de julho de 2009 12:33
  • Bom dia!
    Estou com a seguinte dúvida, como poderia agendar um desligamento de um servidor por exemplo 1:00 da manha, pois o agendamento pelo comando shutdown /i em workstations vai pra mais de duas horas, já em servidores notei uma limitação de 10 min.
    Teria como retirar essa limitação ou criar um script para que determinada hora o servidor desligue?

    no aguardo
    Daxel

    sexta-feira, 24 de julho de 2009 14:39
  • Olá,

    Você poderia usar o script que postei acima.. e criar uma tarefa agendada... Aí funcionaria.


    Você pode criar até um script bat com o comando: shutdown -s -t 0 -f

    Depois entra em tarefas agendadas e cria o agendamento para executar a rotina...


    Até mais,

    Jesiel

    Obs.: Se útil, classifique
    • Sugerido como Resposta Daxel quinta-feira, 30 de julho de 2009 22:04
    sexta-feira, 24 de julho de 2009 16:00
  • Perfeito Jesiel!
    quinta-feira, 30 de julho de 2009 22:05