none
Script para Leitura de Serviço e Envio de Email RRS feed

  • Pergunta

  • Bom dia!

    Tenho uma Quantidade X de servidores rodando uma Aplicação Especifica, e preciso monitorar os serviços desta aplicação.

    Precisaria que o Script fizesse a leitura do serviço de 5 em 5 minutos, se estiver Rodando ele não faria nenhuma ação, e se estiver Parado ele enviaria um email pra mim, informando Serviço Parado.

    Alguém pode me ajudar com este comando e como Aplicar.

    Utilizo o Server 2012 em todos eles.

    Obrigado!


    quarta-feira, 26 de agosto de 2015 14:41

Respostas

  • Diego

    Bom dia

    Veja se o script abaixo lhe ajuda, altere o nome do serviço e os itens abaixo;

    Endereço de e-mail de envio.

    Endereço de e-mail que recebera.

    Nome do serviço.

    SMTPServer

    Username e passoword.

    Da forma que o script esta, além de enviar o alerta ele ira iniciar o serviço.

    Script.

    strComputer = "."
    Const cdoSendUsingPickup = 1 'Send message using the local SMTP service pickup directory. 
    Const cdoSendUsingPort = 2 'Send the message using the network (SMTP over the network). 
    
    Const cdoAnonymous = 0 'Do not authenticate
    Const cdoBasic = 1 'basic (clear-text) authentication
    Const cdoNTLM = 2 'NTLM
    
    Set objMessage = CreateObject("CDO.Message") 
    objMessage.Subject = "O serviço DNS Cache acabou de ser interrompido...." 
    objMessage.From = """Monitoramento de Serviços"" <monitoramento@dominio.com.br>"
    objMessage.To = "e-mail@dominio.com.br" 
    objMessage.TextBody = "O processo de monitoração indentificou que o serviço xxxx parou..."
    
    While 1 = 1
    
    Set objWMIService = GetObject("winmgmts://" & strComputer & "/root/cimv2")
    strWQL = "SELECT * " & _
    	"FROM __InstanceModificationEvent " & _
    	"WITHIN 2 " &_
    	"WHERE TargetInstance ISA 'Win32_Service' " & _
    	"AND TargetInstance.Name = 'DNSCACHE'" & _
    	"AND TargetInstance.State = 'Stopped'"
    	
    Set objEventSource = objWMIService.ExecNotificationQuery(strWQL)
    Set objEventObject = objEventSource.NextEvent()
    	objMessage.Configuration.Fields.Item _
    	("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 
    	objMessage.Configuration.Fields.Item _
    	("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtpserver.dominio.com.br"
    	objMessage.Configuration.Fields.Item _
    	("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = cdoBasic
    	objMessage.Configuration.Fields.Item _
    	("http://schemas.microsoft.com/cdo/configuration/sendusername") = "username"
    	objMessage.Configuration.Fields.Item _
    	("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "senha"
    	objMessage.Configuration.Fields.Item _
    	("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 
    	objMessage.Configuration.Fields.Item _
    	("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = False
    	objMessage.Configuration.Fields.Item _
    	("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
    	objMessage.Configuration.Fields.Update
    	objMessage.Send 
    
    Set objShell = CreateObject("WScript.Shell")
    	objShell.Run "%COMSPEC% /c net start DNSCACHE",,1
    Wend


    Your potential. Our passion - Microsoft

    • Sugerido como Resposta Edinaldo Junior sexta-feira, 28 de agosto de 2015 15:59
    • Marcado como Resposta Diego Penteriche segunda-feira, 31 de agosto de 2015 14:08
    sexta-feira, 28 de agosto de 2015 10:54

Todas as Respostas

  • Diego

    Bom dia

    Veja se o script abaixo lhe ajuda, altere o nome do serviço e os itens abaixo;

    Endereço de e-mail de envio.

    Endereço de e-mail que recebera.

    Nome do serviço.

    SMTPServer

    Username e passoword.

    Da forma que o script esta, além de enviar o alerta ele ira iniciar o serviço.

    Script.

    strComputer = "."
    Const cdoSendUsingPickup = 1 'Send message using the local SMTP service pickup directory. 
    Const cdoSendUsingPort = 2 'Send the message using the network (SMTP over the network). 
    
    Const cdoAnonymous = 0 'Do not authenticate
    Const cdoBasic = 1 'basic (clear-text) authentication
    Const cdoNTLM = 2 'NTLM
    
    Set objMessage = CreateObject("CDO.Message") 
    objMessage.Subject = "O serviço DNS Cache acabou de ser interrompido...." 
    objMessage.From = """Monitoramento de Serviços"" <monitoramento@dominio.com.br>"
    objMessage.To = "e-mail@dominio.com.br" 
    objMessage.TextBody = "O processo de monitoração indentificou que o serviço xxxx parou..."
    
    While 1 = 1
    
    Set objWMIService = GetObject("winmgmts://" & strComputer & "/root/cimv2")
    strWQL = "SELECT * " & _
    	"FROM __InstanceModificationEvent " & _
    	"WITHIN 2 " &_
    	"WHERE TargetInstance ISA 'Win32_Service' " & _
    	"AND TargetInstance.Name = 'DNSCACHE'" & _
    	"AND TargetInstance.State = 'Stopped'"
    	
    Set objEventSource = objWMIService.ExecNotificationQuery(strWQL)
    Set objEventObject = objEventSource.NextEvent()
    	objMessage.Configuration.Fields.Item _
    	("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 
    	objMessage.Configuration.Fields.Item _
    	("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtpserver.dominio.com.br"
    	objMessage.Configuration.Fields.Item _
    	("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = cdoBasic
    	objMessage.Configuration.Fields.Item _
    	("http://schemas.microsoft.com/cdo/configuration/sendusername") = "username"
    	objMessage.Configuration.Fields.Item _
    	("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "senha"
    	objMessage.Configuration.Fields.Item _
    	("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 
    	objMessage.Configuration.Fields.Item _
    	("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = False
    	objMessage.Configuration.Fields.Item _
    	("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
    	objMessage.Configuration.Fields.Update
    	objMessage.Send 
    
    Set objShell = CreateObject("WScript.Shell")
    	objShell.Run "%COMSPEC% /c net start DNSCACHE",,1
    Wend


    Your potential. Our passion - Microsoft

    • Sugerido como Resposta Edinaldo Junior sexta-feira, 28 de agosto de 2015 15:59
    • Marcado como Resposta Diego Penteriche segunda-feira, 31 de agosto de 2015 14:08
    sexta-feira, 28 de agosto de 2015 10:54
  • É possível fazer o mesmo com PoSh e um arquivo de texto contendo os nomes dos servidores em cada linha.

    $From = "SenderEmail@YourDomain.com"
    $To = "RecipientEmail@YourDomain.com"
    $Subject = "ALERT: Something goes wrong!"
    $SMTPServer = "SMTP.YourDomain.com"
    $SMTPPort = "587"
    $StatusMessage = @()
    $ServiceName = "BITS"
    Get-Content C:\Source\Servers.txt | ForEach {
        If (Test-Connection -ComputerName $_ -Count 1 -ErrorAction SilentlyContinue) {
            If ((Get-Service -ComputerName $_ -Name $ServiceName).Status -ne "Running") {
                $StatusMessage += "Service $ServiceName is not running on $_"
            }
        }
        Else {
            $StatusMessage += "Unreachable server: $_"
        }
    }
    If ($StatusMessage -ne "") {
        Send-MailMessage -From $From -To $To -Cc $Cc -Subject $Subject -Body $StatusMessage -SmtpServer $SMTPServer -Port $SMTPPort
    }

    • Sugerido como Resposta Edinaldo Junior sexta-feira, 28 de agosto de 2015 15:59
    sexta-feira, 28 de agosto de 2015 15:14
  • Perfeito Leandro.

    Era o que eu precisava, ja utilizei os comandos fiz as alterações necessárias e está funcionando.

    Muito Obrigado!

    segunda-feira, 31 de agosto de 2015 14:06
  • Obrigado Anderson,

    Consegui fazer funcionar utilizando o seu processo.

    Creio que para alguns clientes eu possa usar a sua alternativa.

    Obrigado!

    segunda-feira, 31 de agosto de 2015 14:08
  • Leandro, boa tarde.

    Sei que este post é meio antigo mas me ajudou bastante.

    Poderia me tirar uma dúvida ? Caso eu queira monitorar mais de um serviço, como consigo fazer a query ? vi que no WQL (SQL for WMI) não existe a clausula IN (onde posso informar vários valores). Sendo assim saberia me dizer como devo proceder ? Já tentei de várias formas e não chego em nenhum resultado. Só dá erro na query.

    Fico imensamente grato.

    Att,

    Wanderley Jr.

    terça-feira, 14 de novembro de 2017 17:31