none
Monitor de Serviços (Spooler) RRS feed

  • Pergunta

  • Olá pessoal,

    Tenho um script que encontrei aqui no forum mesmo que verifica os serviços e envia um email caso o mesmo esteja parado.

    Quando é parado o serviço e executado o script, retorna um erro:

    Linha: 37
    Caract.: 2
    Erro: O servidor rejeitou um ou mais endereços de destinatário. A resposta do servidor foi: 550 No such recipient
    Código 8004020F
    Origem: (null)

    Se alguém puder ajudar...

    Valew!!


    strServidor="10.41.8.115"
    strServico="spooler"

    Set objShell = CreateObject("Wscript.Shell")
    strCommand = "sc \\" & strServidor & " query " & strServico

    Set objExec = objShell.Exec(strCommand)
     
    Do Until objExec.Status
        Wscript.Sleep 250
    Loop

    strRes=objExec.StdOut.ReadAll()

    if instr(strRes,"STATE              : 4  RUNNING")=0 then
     Envia_Alerta "email"
    end if

     


    Sub Envia_Alerta(para)
     'Adaptado do post: http://forums.microsoft.com/technet-br/ShowPost.aspx?PostID=741907&SiteID=29
     Set objEmail = CreateObject("CDO.Message")

     objEmail.From = "email"
     objEmail.To = "email"
     objEmail.Subject = "ALERTA DE INDISPONIBILIDADE"
     objEmail.TextBody = "serviço: " & strServico & " esta indisponivel"
     objEmail.Configuration.Fields.Item _
          ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
     objEmail.Configuration.Fields.Item _
         ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "10.41.100.5" '<-informe seu servidor smtp
     objEmail.Configuration.Fields.Item _
         ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
     objEmail.Configuration.Fields.Update
     objEmail.Send
    end sub
    quinta-feira, 29 de janeiro de 2009 19:50

Respostas

  • Olá,

    Desculpe pela demora... Agora eu testei aqui.... Segue o script abaixo

    Atençao nos comentários onde é para alterar.


    strComputer = "."

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

    'AQUI ESTÁ O SERVIÇO SPOOLER, ALTERE PARA QUAL SERVIÇO VOCÊ DESEJAR
    Set colRunningServices =  objWMIService.ExecQuery _
        ("Select * from Win32_Service Where Name = 'Spooler'") 

    For Each objService in colRunningServices
        if objService.State <> "Running" Then
           Envia_Alerta objService.Name
        End if
    Next



    Sub Envia_Alerta(strServico)

    Set objEmail = CreateObject("CDO.Message")

    'AQUI VOCÊ COLOCA QUEM VAI ENVIAR O EMAIL
     objEmail.From = "servidor@contoso.msft"

    'AQUI VOCE COLOCA QUEM VAI RECEBER O EMAIL
     objEmail.To = "jesiel@contoso.msft"

     objEmail.Subject = "ALERTA DE INDISPONIBILIDADE"
     objEmail.TextBody = "serviço: " & strServico & " esta indisponivel"
     objEmail.Configuration.Fields.Item _
          ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2

    'AQUI VOCÊ TEM QUE COLOCAR O IP DO SERVIDOR DE SMTP QUE IRÁ ENVIAR A MENSAGEM.
    objEmail.Configuration.Fields.Item _
         ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "10.0.0.1" '<-informe seu servidor smtp
     objEmail.Configuration.Fields.Item _
         ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
     objEmail.Configuration.Fields.Update
     objEmail.Send
    end sub


    Faça os testes e nos retorne.

    Até mais,

    Jesiel

    Obs.: Se útil, classifique
    segunda-feira, 9 de fevereiro de 2009 20:39

Todas as Respostas

  • Pessoal, 

     

    Achei este script que faz o que eu quero, porém exibe o erro num box,

    Eu gostaria que ele enviasse um email com o alerta...

     Alguém ajuda a adaptar?...

    Muito Obrigado pessoal...

     

    segue...

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

    Set colRunningServices =  objWMIService.ExecQuery _
        ("Select * from Win32_Service Where Name = 'Spooler'")

    For Each objService in colRunningServices
        Wscript.Echo objService.DisplayName & " -- " & objService.State
    Next

    • Sugerido como Resposta altairsantos sexta-feira, 17 de setembro de 2010 14:35
    sexta-feira, 30 de janeiro de 2009 12:48
  • Alguém da uma força ai galera???!!!
    segunda-feira, 2 de fevereiro de 2009 17:03
  • Olá,

    Alterei só que não testei, faça os testes aí e nos retorne.

    Até mais,

    Jesiel

    Obs.: Se útil, classifique

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

    Set colRunningServices =  objWMIService.ExecQuery _
        ("Select * from Win32_Service Where Name = 'Spooler'")

    For Each objService in colRunningServices
        if objService.State <> "Running" Then
        Envia_Alerta "email"
        End if

    Next


    Sub Envia_Alerta(para)
     'Adaptado do post: http://forums.microsoft.com/technet-br/ShowPost.aspx?PostID=741907&SiteID=29
     Set objEmail = CreateObject("CDO.Message")

     objEmail.From = "email"
     objEmail.To = "email"
     objEmail.Subject = "ALERTA DE INDISPONIBILIDADE"
     objEmail.TextBody = "serviço: " & strServico & " esta indisponivel"
     objEmail.Configuration.Fields.Item _
          ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
     objEmail.Configuration.Fields.Item _
         ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "10.41.100.5" '<-informe seu servidor smtp
     objEmail.Configuration.Fields.Item _
         ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
     objEmail.Configuration.Fields.Update
     objEmail.Send
    end sub
    segunda-feira, 2 de fevereiro de 2009 19:51
  • Olá Jesiel,

    Quando paro o serviço de impressão, retornou o mesmo erro:

    Linha: 37
    Caract.: 2
    Erro: O servidor rejeitou um ou mais endereços de destinatário. A resposta do servidor foi: 550 No such recipient
    Código 8004020F
    Origem: (null)

    Se puder ajudar, preciso muito desse script...

    Obrigado
    sexta-feira, 6 de fevereiro de 2009 11:58
  • Olá,

    Desculpe pela demora... Agora eu testei aqui.... Segue o script abaixo

    Atençao nos comentários onde é para alterar.


    strComputer = "."

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

    'AQUI ESTÁ O SERVIÇO SPOOLER, ALTERE PARA QUAL SERVIÇO VOCÊ DESEJAR
    Set colRunningServices =  objWMIService.ExecQuery _
        ("Select * from Win32_Service Where Name = 'Spooler'") 

    For Each objService in colRunningServices
        if objService.State <> "Running" Then
           Envia_Alerta objService.Name
        End if
    Next



    Sub Envia_Alerta(strServico)

    Set objEmail = CreateObject("CDO.Message")

    'AQUI VOCÊ COLOCA QUEM VAI ENVIAR O EMAIL
     objEmail.From = "servidor@contoso.msft"

    'AQUI VOCE COLOCA QUEM VAI RECEBER O EMAIL
     objEmail.To = "jesiel@contoso.msft"

     objEmail.Subject = "ALERTA DE INDISPONIBILIDADE"
     objEmail.TextBody = "serviço: " & strServico & " esta indisponivel"
     objEmail.Configuration.Fields.Item _
          ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2

    'AQUI VOCÊ TEM QUE COLOCAR O IP DO SERVIDOR DE SMTP QUE IRÁ ENVIAR A MENSAGEM.
    objEmail.Configuration.Fields.Item _
         ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "10.0.0.1" '<-informe seu servidor smtp
     objEmail.Configuration.Fields.Item _
         ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
     objEmail.Configuration.Fields.Update
     objEmail.Send
    end sub


    Faça os testes e nos retorne.

    Até mais,

    Jesiel

    Obs.: Se útil, classifique
    segunda-feira, 9 de fevereiro de 2009 20:39
  • Olá Jesiel,

    Funcionou perfeitamente!

    Muito Obrigado.

    Agora tenho outra dúvida, tem como enviar apenas 1 email quando  o serviço estiver disponível?

    Mais uma vez Obrigado.
    quarta-feira, 11 de fevereiro de 2009 11:23
  • Olá,

    hugorpc, é complicado porque você vai colocar este script no schedulle certo???

    Daria pra fazer da seguinte forma:

    Se o serviço estiver OK. ele gera um log em um arquivo texto ao invés de mandar email.

    E criarmos um outro script para ler o arquivo de log e mandar um email com todo o log (por hora por exemplo)

    Se te atender dessa maneira e precisar de ajuda, só avisar.

    Até mais,

    Jesiel

    Obs.: Se útil, classifique
    quarta-feira, 11 de fevereiro de 2009 12:10
  • Pessoal,

    Utilizei esse script também, e ficou perfeito...

    Só estou em dúvida referente esses links:

      ("http://schemas.microsoft.com/cdo/configuration/sendusing")

      ("http://schemas.microsoft.com/cdo/configuration/smtpserver")
      ("http://schemas.microsoft.com/cdo/configuration/smtpserverport")

    Eu tento acessar pelo navegar e consta como página indisponível, mas o script funciona. Então para que serve esses links?

    Desculpem por aproveitar o tópico para tirar essa dúvida....

    Obrigado..



    sexta-feira, 13 de fevereiro de 2009 10:57
  • Olá,

    Na verdade esse link é onde encontra as propriedades dos campos, não é um endereço para navegação.

    É um código padrão.... não se preocupe...

    Até mais,

    Jesiel
    sexta-feira, 13 de fevereiro de 2009 11:54
  • Novamente, obrigado.

    T+
    sexta-feira, 13 de fevereiro de 2009 12:02
  • Jesiel,

    Como faço para que no assunto e no corpo do e-mail conste o hostname da máquina?

    Tentei:

    objEmail.Subject = "ALERTA DE INDISPONIBILIDADE"
     objEmail.TextBody = "serviço: " & strServico & " esta indisponivel " & strComputer & ""

    Mas não funcionou.

    Pode me ajudar?
    sexta-feira, 13 de fevereiro de 2009 12:15
  • Como esse script é usado ?

    Tipo, se for executado manualmente,  é só rodar uma vez no server ? 
    Ou deixo no schedule rodando varias vezes ao dia ?


    Obrigado
    Aldiko
    quinta-feira, 12 de março de 2009 15:01
  • Edson S Freitas disse:

    Jesiel,

    Como faço para que no assunto e no corpo do e-mail conste o hostname da máquina?

    Tentei:

    objEmail.Subject = "ALERTA DE INDISPONIBILIDADE"
     objEmail.TextBody = "serviço: " & strServico & " esta indisponivel " & strComputer & ""

    Mas não funcionou.

    Pode me ajudar?

    Alguém faz idéia?

    Agradeço qualquer ajuda...

    quinta-feira, 12 de março de 2009 15:38
  • Olá,

    Edson, utilize as linhas abaixo:

    Set objNetwork = CreateObject("Wscript.Network")
    strComputerName = objNetwork.Computername

    Coloque logo abaixo do Set ColRunningServices


    Aí, embaixo da linha objEmail.TextBody = "serviço: " & strServico & " esta indisponivel"

    Adicione a linha abaixo:

    objEmail.TextBody = "Computador: " & strComputerName


    Até mais,

    Jesiel

    Obs.: Se útil, classifique
    quinta-feira, 12 de março de 2009 16:05
  • Jesiel, grato pela ajuda.

     Com as modificações estou recebendo e-mail porém no corpo do e-mail vem apenas "Computador: XXXXXX", não vem mais a informação sobre o nome do serviço, da linha:

    objEmail.TextBody = "serviço: " & strServico & " esta indisponivel "

    Segue meu script adaptado:


    strComputer = "."

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

    'AQUI ESTÁ O SERVIÇO SPOOLER, ALTERE PARA QUAL SERVIÇO VOCÊ DESEJAR
    Set colRunningServices =  objWMIService.ExecQuery _
        ("Select * from Win32_Service Where Name = 'Spooler'")

    Set objNetwork = CreateObject("Wscript.Network")
    strComputerName = objNetwork.Computername

    For Each EnviarobjService in colRunningServices
        if objService.State <> "Running" Then
           Envia_Alerta objService.Name
        End if
    Next



    Sub Envia_Alerta(strServico)

    Set objEmail = CreateObject("CDO.Message")

    'AQUI VOCÊ COLOCA QUEM VAI ENVIAR O EMAIL
     objEmail.From = "teste@teste.com.br"

    'AQUI VOCE COLOCA QUEM VAI RECEBER O EMAIL
     objEmail.To = "teste@teste.com.br"

     objEmail.Subject = "ALERTA DE INDISPONIBILIDADE"
     objEmail.TextBody = "serviço: " & strServico & " esta indisponivel"
     objEmail.TextBody = "Computador: " & strComputerName
     objEmail.Configuration.Fields.Item _
          ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2

    'AQUI VOCÊ TEM QUE COLOCAR O IP DO SERVIDOR DE SMTP QUE IRÁ ENVIAR A MENSAGEM.
    objEmail.Configuration.Fields.Item _
         ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "XXX.X.X.XXX" '<-informe seu servidor smtp
     objEmail.Configuration.Fields.Item _
         ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
     objEmail.Configuration.Fields.Update
     objEmail.Send
    end sub




    Pode me ajudar novamente?
    quinta-feira, 12 de março de 2009 18:28
  • Olá Edson,

    Segue abaixo o script corrigido:

    strComputer = "."

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

    'AQUI ESTÁ O SERVIÇO SPOOLER, ALTERE PARA QUAL SERVIÇO VOCÊ DESEJAR
    Set colRunningServices =  objWMIService.ExecQuery _
        ("Select * from Win32_Service Where Name = 'Spooler'")



    For Each objService in colRunningServices
        if objService.State <> "Running" Then
           Envia_Alerta objService.Name
        End if
    Next



    Sub Envia_Alerta(strServico)



    Set objEmail = CreateObject("CDO.Message")
    Set objNetwork = CreateObject("Wscript.Network")
    strComputerName = objNetwork.Computername

    'AQUI VOCÊ COLOCA QUEM VAI ENVIAR O EMAIL
     objEmail.From = "teste@teste.com.br"

    'AQUI VOCE COLOCA QUEM VAI RECEBER O EMAIL
     objEmail.To = "teste@tete.com.br"

     objEmail.Subject = "ALERTA DE INDISPONIBILIDADE"
     objEmail.TextBody = "serviço: " & strServico & " esta indisponivel" & vbcrlf
     objEmail.TextBody = objEmail.TextBody & "Computador: " & strComputerName
     objEmail.Configuration.Fields.Item _
          ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2

    'AQUI VOCÊ TEM QUE COLOCAR O IP DO SERVIDOR DE SMTP QUE IRÁ ENVIAR A MENSAGEM.
    objEmail.Configuration.Fields.Item _
         ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "xxx.xxx.xxx.xxx" '<-informe seu servidor smtp
     objEmail.Configuration.Fields.Item _
         ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
     objEmail.Configuration.Fields.Update
     objEmail.Send
    end sub


    Até mais,

    Jesiel

    Obs.: Se útil, classifique
    quinta-feira, 12 de março de 2009 19:45
  • Funcionou perfeitamente.

    Muito obrigado.
    quinta-feira, 12 de março de 2009 20:06
  • Hugo e amigos,

    Pelo que entendi se o status do processo for diferente de rodando ele toma as ações que vc programar, mas o problema que tenho é status "Não respondendo". Dessa forma o script enxerga o programa como aberto ou seja rodando, mas na verdade suas funções já eram pois travou e parou.
    Tem que haver alguma maneira de monitorar isso, pois se o sistema gera essa resposta ele deve alterar alguma variavel, basta só saber qual.

    Meu post: http://social.technet.microsoft.com/Forums/pt-BR/scriptadminpt/thread/9149e32b-fbb0-47f7-be13-47fd27b9f3d4/

    Obrigado.

    Jensen Clayton 
    terça-feira, 17 de março de 2009 13:06