none
Script não desliga máquina RRS feed

  • Pergunta

  • Pessoal, ao executar esse script ele cria o txt no C: mas não desliga os micros. alguem sabe o motivo? segue o script que estou rodando

    'Insira os dados conforme necessidade. 
    StartIP = "172.16.1.30"
    EndIP = "172.16.1.31"
    Data = Date()
    DtAt = Split(data,"/",-1)
    DataLog = DtAt(0)&DtAt(1)&DtAt(2)
    
    TempFilename = "C:\Log do dia "&DataLog&".txt"
    
    LF = chr(10)
    const ForReading = 1, ForWriting = 2, ForAppending = 3
    
    currentIP = StartIP
    
    j = 2
    
    'Inicia o LOG
    
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    
    Set Arquivo = objFSO.CreateTextFile(Tempfilename)
    Set WSHShell = WScript.CreateObject("WScript.Shell")
    
    Do
    
    Strhost = currentIP
    if Ping(strHost) = True Then
     On Error Resume Next
     Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & _
     strHost & "\root\cimv2")
    
      if Err.number <> 0 Then
    
        Erro = Err.Description
       Err.Clear
         arquivo.writeline "IP " & strHost & " - Terminal encontrado, retornado Erro: "&Erro
       Else
    
    
       Set colSettings = objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
       For Each objComputer in colSettings
       StrTerminal = objcomputer.name
       StrUsuario = objcomputer.username
    
       'Executa o ShutDown
        WSHShell.Run "shutdown -m \\" & strHost , 1, false
       'Grava Log
         arquivo.writeline "IP " & strHost & " - "&StrTerminal&" - "&Strusuario&" - comando de desligar as - " & Time()
    
    
    
      Next
    
      End If
    
    
     Else
    
      arquivo.writeline "Terminal " & strHost & " não pode ser encontrado "
    
    end if
     xx = currentIP
     currentIP = newIP(xx)
      j = j+1
    Loop Until currentIP = EndIP
    
    Arquivo.close()
    
    
     '--------------------------------
    '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
          'WScript.Echo "Status code is " & objRetStatus.StatusCode
        else
          Ping = True
          'Wscript.Echo "Bytes = " & vbTab & objRetStatus.BufferSize
          'Wscript.Echo "Time (ms) = " & vbTab & objRetStatus.ResponseTime
          'Wscript.Echo "TTL (s) = " & vbTab & objRetStatus.ResponseTimeToLive
        end if
      next
    
    End Function
    
    '------------
    'function for increasing the IP number
    '------------
    function newip(xx)
       dim n,n1,n2,n3,n4,v1,v2,v3,v4
       n = 1
       n0 = n
    
       while mid (xx,n,1) <> "."
         n = n+1
       wend
    
       n1 = n
       n = n+1
    
       while mid (xx,n,1) <> "."
         n = n+1
       wend
    
       n2 = n
       n = n+1
    
       while mid (xx,n,1) <> "."
         n = n+1
       wend
    
       n3 = n
       n4 = len(xx)
       v1 = mid (xx,n0,n1-1)
       v2 = mid (xx,n1+1,n2-n1-1)
       v3 = mid (xx,n2+1,n3-n2-1)
       v4 = mid (xx,n3+1,n4-n3)
       v4 = v4+1
    
       if v4 > 255 then
         v3 = v3+1
         v4 = 0
       end if
    
       if v3 > 255 then
         v2 = v2+1
         v3 = 0
         v4 = 0
       end if
    
       if v2 > 255 then
         v1 = v1+1
         v2 = 0
         v3 = 0
         v4 = 0
       end if
    
       return = (v1 & "." & v2 & "." & v3 & "." & v4)
       newIP = return
    end function
    
    '------------
    'function for validating the IP address
    '------------
    function ValidIP(xx)
    
       dim n,n0,n1,n2,n3,n4,v1,v2,v3,v4,s,s1,s2,s3,s4
       n = 1
       n0 = n
       s = 1
       return = "valid"
    
       s1 = InStr(s, xx, ".", 1)
       s2 = InStr(s1+1, xx, ".", 1)
       s3 = InStr(s2+1, xx, ".", 1)
       s4 = len(xx)+1
    
       if s1-s < 1 then
         return = "invalid"
       elseif s1-s > 3 then
         return = "invalid"
       elseif s2-s1 < 1 then
         return = "invalid"
       elseif s2-s1 > 4 then
         return = "invalid"
       elseif s3-s2 < 1 then
         return = "invalid"
       elseif s3-s2 > 4 then
         return = "invalid"
       elseif s4-s3 < 1 then
         return = "invalid"
       elseif s4-s3 > 4 then
         return = "invalid"
       else
         while mid (xx,n,1) <> "."
            n = n+1
         wend
    
         n1 = n
         n = n+1
    
         while mid (xx,n,1) <> "."
            n = n+1
         wend
    
         n2 = n
         n = n+1
    
         while mid (xx,n,1) <> "."
            n = n+1
         wend
    
         n3 = n
         n4 = len(xx)
         v1 = mid (xx,n0,n1-1)
         v2 = mid (xx,n1+1,n2-n1-1)
         v3 = mid (xx,n2+1,n3-n2-1)
         v4 = mid (xx,n3+1,n4-n3)
    
         if v4 > 255 then
            return = "invalid"
         end if
    
         if v3 > 255 then
            return = "invalid"
         end if
    
         if v2 > 255 then
            return = "invalid"
         end if
    
         if v1 > 255 then
            return = "invalid"
         end if
       end if
    
       ValidIP = return
    
    end function


    OLHA O RESULTADO

    IP 172.16.1.30 - WKS30 - VITORIAASSET\cguarachi - comando de desligar as - 16:19:31

    Mas não desliga.

    obrigado

    Tópico inicial

    Script - Shutdown somente para as máquinas ligadas

    social.technet.microsoft.com/Forums/pt-BR/scriptadminpt/thread/205238e1-b684-4cf6-9f84-ed232d0d46d5

                          
    • Dividir Fábio JrModerator terça-feira, 5 de junho de 2012 19:51 Aberto em tópico já encerrado
    • Editado Fábio JrModerator terça-feira, 5 de junho de 2012 19:56 Formatação , link
    terça-feira, 5 de junho de 2012 19:20

Respostas

  • Srs.

    A linha que realmente importa é esta:

     WSHShell.Run "shutdown -m \\" & strHost , 1, false

    O resultado que é impresso na tela pode não ser a realidade pois ele não confere se o resultado da linha anterior foi executado com sucesso.

    Esta parecendo o caso de acesso negado, outros usuário utilizaram este script com sucesso. O usuário que vcs estão utilizando para executar o script tem que ter permissão para desligar o servidor.

    Para testar abra um prompt (no mesmo local onde você estão utilizando o script e com o mesmo usuário) de comando e digite o comando:

    shutdown -m \\cguarachi -s

    sendo cguarachi o nome de um servidor (exemplo do inicio do tópico).

    Realizou com sucesso? Se foi com sucesso então faltou o -s(desligar, -r é reinicializar) na linha do script (a primeira que marquei neste tópico) então teria que ser:

    WSHShell.Run "shutdown -m \\" & strHost & " -s" , 1, false


    Fábio de Paula Junior

    terça-feira, 5 de junho de 2012 20:14
    Moderador

Todas as Respostas

  • Pessoal, ao executar esse script ele cria o txt no C: mas não desliga os micros. alguem sabe o motivo? segue o script que estou rodando

    'Insira os dados conforme necessidade. 
    StartIP = "172.16.1.30"
    EndIP = "172.16.1.31"
    Data = Date()
    DtAt = Split(data,"/",-1)
    DataLog = DtAt(0)&DtAt(1)&DtAt(2)

    TempFilename = "C:\Log do dia "&DataLog&".txt"

    LF = chr(10)
    const ForReading = 1, ForWriting = 2, ForAppending = 3

    currentIP = StartIP

    j = 2

    'Inicia o LOG

    Set objFSO = CreateObject("Scripting.FileSystemObject")

    Set Arquivo = objFSO.CreateTextFile(Tempfilename)
    Set WSHShell = WScript.CreateObject("WScript.Shell")

    Do

    Strhost = currentIP
    if Ping(strHost) = True Then
     On Error Resume Next
     Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & _
     strHost & "\root\cimv2")

      if Err.number <> 0 Then

        Erro = Err.Description
       Err.Clear
         arquivo.writeline "IP " & strHost & " - Terminal encontrado, retornado Erro: "&Erro
       Else


       Set colSettings = objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
       For Each objComputer in colSettings
       StrTerminal = objcomputer.name
       StrUsuario = objcomputer.username

       'Executa o ShutDown
        WSHShell.Run "shutdown -m \\" & strHost , 1, false
       'Grava Log
         arquivo.writeline "IP " & strHost & " - "&StrTerminal&" - "&Strusuario&" - comando de desligar as - " & Time()



      Next

      End If


     Else

      arquivo.writeline "Terminal " & strHost & " não pode ser encontrado "

    end if
     xx = currentIP
     currentIP = newIP(xx)
      j = j+1
    Loop Until currentIP = EndIP

    Arquivo.close()


     '--------------------------------
    '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
          'WScript.Echo "Status code is " & objRetStatus.StatusCode
        else
          Ping = True
          'Wscript.Echo "Bytes = " & vbTab & objRetStatus.BufferSize
          'Wscript.Echo "Time (ms) = " & vbTab & objRetStatus.ResponseTime
          'Wscript.Echo "TTL (s) = " & vbTab & objRetStatus.ResponseTimeToLive
        end if
      next

    End Function

    '------------
    'function for increasing the IP number
    '------------
    function newip(xx)
       dim n,n1,n2,n3,n4,v1,v2,v3,v4
       n = 1
       n0 = n

       while mid (xx,n,1) <> "."
         n = n+1
       wend

       n1 = n
       n = n+1

       while mid (xx,n,1) <> "."
         n = n+1
       wend

       n2 = n
       n = n+1

       while mid (xx,n,1) <> "."
         n = n+1
       wend

       n3 = n
       n4 = len(xx)
       v1 = mid (xx,n0,n1-1)
       v2 = mid (xx,n1+1,n2-n1-1)
       v3 = mid (xx,n2+1,n3-n2-1)
       v4 = mid (xx,n3+1,n4-n3)
       v4 = v4+1

       if v4 > 255 then
         v3 = v3+1
         v4 = 0
       end if

       if v3 > 255 then
         v2 = v2+1
         v3 = 0
         v4 = 0
       end if

       if v2 > 255 then
         v1 = v1+1
         v2 = 0
         v3 = 0
         v4 = 0
       end if

       return = (v1 & "." & v2 & "." & v3 & "." & v4)
       newIP = return
    end function

    '------------
    'function for validating the IP address
    '------------
    function ValidIP(xx)

       dim n,n0,n1,n2,n3,n4,v1,v2,v3,v4,s,s1,s2,s3,s4
       n = 1
       n0 = n
       s = 1
       return = "valid"

       s1 = InStr(s, xx, ".", 1)
       s2 = InStr(s1+1, xx, ".", 1)
       s3 = InStr(s2+1, xx, ".", 1)
       s4 = len(xx)+1

       if s1-s < 1 then
         return = "invalid"
       elseif s1-s > 3 then
         return = "invalid"
       elseif s2-s1 < 1 then
         return = "invalid"
       elseif s2-s1 > 4 then
         return = "invalid"
       elseif s3-s2 < 1 then
         return = "invalid"
       elseif s3-s2 > 4 then
         return = "invalid"
       elseif s4-s3 < 1 then
         return = "invalid"
       elseif s4-s3 > 4 then
         return = "invalid"
       else
         while mid (xx,n,1) <> "."
            n = n+1
         wend

         n1 = n
         n = n+1

         while mid (xx,n,1) <> "."
            n = n+1
         wend

         n2 = n
         n = n+1

         while mid (xx,n,1) <> "."
            n = n+1
         wend

         n3 = n
         n4 = len(xx)
         v1 = mid (xx,n0,n1-1)
         v2 = mid (xx,n1+1,n2-n1-1)
         v3 = mid (xx,n2+1,n3-n2-1)
         v4 = mid (xx,n3+1,n4-n3)

         if v4 > 255 then
            return = "invalid"
         end if

         if v3 > 255 then
            return = "invalid"
         end if

         if v2 > 255 then
            return = "invalid"
         end if

         if v1 > 255 then
            return = "invalid"
         end if
       end if

       ValidIP = return

    end function

    OLHA O RESULTADO

    IP 172.16.1.30 - WKS30 - VITORIAASSET\cguarachi - comando de desligar as - 16:19:31

    Mas não desliga.

    obrigado

                          
     Comigo esta dando erro na linha 21 (permissão negada)!
    terça-feira, 5 de junho de 2012 19:51
  • Srs.

    A linha que realmente importa é esta:

     WSHShell.Run "shutdown -m \\" & strHost , 1, false

    O resultado que é impresso na tela pode não ser a realidade pois ele não confere se o resultado da linha anterior foi executado com sucesso.

    Esta parecendo o caso de acesso negado, outros usuário utilizaram este script com sucesso. O usuário que vcs estão utilizando para executar o script tem que ter permissão para desligar o servidor.

    Para testar abra um prompt (no mesmo local onde você estão utilizando o script e com o mesmo usuário) de comando e digite o comando:

    shutdown -m \\cguarachi -s

    sendo cguarachi o nome de um servidor (exemplo do inicio do tópico).

    Realizou com sucesso? Se foi com sucesso então faltou o -s(desligar, -r é reinicializar) na linha do script (a primeira que marquei neste tópico) então teria que ser:

    WSHShell.Run "shutdown -m \\" & strHost & " -s" , 1, false


    Fábio de Paula Junior

    terça-feira, 5 de junho de 2012 20:14
    Moderador