none
Verificar se determinado serviço existe, consultando em uma lista de servidores num txt, caso positivo envia email. RRS feed

  • Pergunta

  • Amigos,

    Estou com dificuldades em concluir um script que tem os objetivos de:

    1- Verificar se um determinado serviço existe;
    2- Esta verificação deve ser feita em todos servidores, neste caso eles estão contidos em um arquivo TXT;
    3- Envia email somente dos que não existem alertando.

    Abaixo segue o script que consegui chegar, ele está enviando email, mas ainda faltam alguns detalhes. Alguém tem alguma sugestão ?

    on error resume next
    Dim arquivo
    
    Const ForReading = 1
    
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set arquivo = objFSO.OpenTextFile("C:\Scripts\list_servers.txt", ForReading)
    
    Set strComputer = arquivo.ReadLine
    
    Set objWMIService = GetObject("winmgmts:" _
        & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    
    Set colRunningServices =  objWMIService.ExecQuery _
        ("Select * from Win32_Service Where Name = 'nCService'")
    
    For Each objService in colRunningServices
    	strComputer = arquivo.ReadLine
    	if objService.State <> "Started" Then
    	EnviaMail
    	End if
    Next
    
    Sub EnviaMail
    	Set WshNetwork = WScript.CreateObject("WScript.Network")
    	StrMicroUsado =  WshNetwork.ComputerName
    	StrLoginUsado =  WshNetwork.UserName
    	De= "mail@empresa.com"
    	Para= "ti@empresa.com"
    	Assunto= "Informações do servidor - " & StrLoginUsado & " - " & StrMicroUsado
    	Corpo = ""
    	Corpo = Corpo & "--------------------------------------------------------------------- <br> "
    	Corpo = Corpo & " Alerta de ausência do serviço                              <br> "
    	Corpo = Corpo & "--------------------------------------------------------------------- <br> "
    	Corpo = Corpo & "                                                                      <br> "
    	Corpo = Corpo & "  Servidor: " & strComputer & "                                       <br> "
    	Corpo = Corpo & "  Data:     " & Date & "                                              <br> "
    	Corpo = Corpo & "  Hora:     " & Time & "                                              <br> "
    	Corpo = Corpo & "                                                                      <br> "
    	Corpo = Corpo & "--------------------------------------------------------------------- <br> " 
    	
    	Set objEmail = CreateObject("CDO.Message")
    	objEmail.From = De
    	objEmail.To = Para
    	objEmail.Subject = Assunto
    	objEmail.HTMLBody = "<p><font size='2' face='Verdana, Arial, Helvetica, sans-serif'>"
    	objEmail.HTMLBody = objEmail.HTMLBody & "<br>"
    	objEmail.HTMLBody = objEmail.HTMLBody & Corpo
    	objEmail.HTMLBody = objEmail.HTMLBody & "<br></fonte></p>"
    	objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    	objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "IP"
    	objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
    	objEmail.Configuration.Fields.Update
    	objEmail.Send   
    
    
    end sub

    Joseph Life Style


    sexta-feira, 13 de julho de 2012 21:22

Respostas

  • José Mário,

    Não entendi se vc quer enviar e-mail quando o serviço está parado ou quando ele não existe, então modifiquei para mandar nos dois casos.

    O seu script estava bom, faltava um Loop para ler linha por linha do arquivo de servidores, cada execução do loop é verificado um servidor.

    on error resume next
    Dim arquivo
    
    Const ForReading = 1
    
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set arquivo = objFSO.OpenTextFile("C:\Scripts\list_servers.txt", ForReading)
    
    Do Until arquivo.AtEndOfStream
    
    	strComputer = arquivo.ReadLine
    	ServicoExiste=False
    	
    	Set objWMIService = GetObject("winmgmts:" _
    		& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    
    	Set colRunningServices =  objWMIService.ExecQuery _
    		("Select * from Win32_Service Where Name = 'nCService'")
    
    		
    	'Se o serviço existir ele entra no FOR
    	For Each objService in colRunningServices
    		ServicoExiste=TRUE 'Guarda a informação que o serviço existe
    		
    		'Se o serviço não estiver execuntando então manda e-mail
    		if objService.State <> "Running" Then
    			EnviaMail
    		End if
    	Next
    	
    	'Se o serviço não existir então manda E-mail
    	IF not ServicoExiste then
    		EnviaMail
    	end if
    	
    Loop
    
    
    
    Sub EnviaMail
    	Set WshNetwork = WScript.CreateObject("WScript.Network")
    	StrMicroUsado =  WshNetwork.ComputerName
    	StrLoginUsado =  WshNetwork.UserName
    	De= "mail@empresa.com"
    	Para= "ti@empresa.com"
    	Assunto= "Informações do servidor - " & StrLoginUsado & " - " & StrMicroUsado
    	Corpo = ""
    	Corpo = Corpo & "--------------------------------------------------------------------- <br> "
    	Corpo = Corpo & " Alerta de ausência do serviço                              <br> "
    	Corpo = Corpo & "--------------------------------------------------------------------- <br> "
    	Corpo = Corpo & "                                                                      <br> "
    	Corpo = Corpo & "  Servidor: " & strComputer & "                                       <br> "
    	Corpo = Corpo & "  Data:     " & Date & "                                              <br> "
    	Corpo = Corpo & "  Hora:     " & Time & "                                              <br> "
    	Corpo = Corpo & "                                                                      <br> "
    	Corpo = Corpo & "--------------------------------------------------------------------- <br> " 
    	
    	Set objEmail = CreateObject("CDO.Message")
    	objEmail.From = De
    	objEmail.To = Para
    	objEmail.Subject = Assunto
    	objEmail.HTMLBody = "<p><font size='2' face='Verdana, Arial, Helvetica, sans-serif'>"
    	objEmail.HTMLBody = objEmail.HTMLBody & "<br>"
    	objEmail.HTMLBody = objEmail.HTMLBody & Corpo
    	objEmail.HTMLBody = objEmail.HTMLBody & "<br></fonte></p>"
    	objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    	objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "IP"
    	objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
    	objEmail.Configuration.Fields.Update
    	objEmail.Send   
    
    
    end sub


    Fábio de Paula Junior


    sexta-feira, 13 de julho de 2012 23:08
    Moderador

Todas as Respostas

  • José Mário,

    Não entendi se vc quer enviar e-mail quando o serviço está parado ou quando ele não existe, então modifiquei para mandar nos dois casos.

    O seu script estava bom, faltava um Loop para ler linha por linha do arquivo de servidores, cada execução do loop é verificado um servidor.

    on error resume next
    Dim arquivo
    
    Const ForReading = 1
    
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set arquivo = objFSO.OpenTextFile("C:\Scripts\list_servers.txt", ForReading)
    
    Do Until arquivo.AtEndOfStream
    
    	strComputer = arquivo.ReadLine
    	ServicoExiste=False
    	
    	Set objWMIService = GetObject("winmgmts:" _
    		& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    
    	Set colRunningServices =  objWMIService.ExecQuery _
    		("Select * from Win32_Service Where Name = 'nCService'")
    
    		
    	'Se o serviço existir ele entra no FOR
    	For Each objService in colRunningServices
    		ServicoExiste=TRUE 'Guarda a informação que o serviço existe
    		
    		'Se o serviço não estiver execuntando então manda e-mail
    		if objService.State <> "Running" Then
    			EnviaMail
    		End if
    	Next
    	
    	'Se o serviço não existir então manda E-mail
    	IF not ServicoExiste then
    		EnviaMail
    	end if
    	
    Loop
    
    
    
    Sub EnviaMail
    	Set WshNetwork = WScript.CreateObject("WScript.Network")
    	StrMicroUsado =  WshNetwork.ComputerName
    	StrLoginUsado =  WshNetwork.UserName
    	De= "mail@empresa.com"
    	Para= "ti@empresa.com"
    	Assunto= "Informações do servidor - " & StrLoginUsado & " - " & StrMicroUsado
    	Corpo = ""
    	Corpo = Corpo & "--------------------------------------------------------------------- <br> "
    	Corpo = Corpo & " Alerta de ausência do serviço                              <br> "
    	Corpo = Corpo & "--------------------------------------------------------------------- <br> "
    	Corpo = Corpo & "                                                                      <br> "
    	Corpo = Corpo & "  Servidor: " & strComputer & "                                       <br> "
    	Corpo = Corpo & "  Data:     " & Date & "                                              <br> "
    	Corpo = Corpo & "  Hora:     " & Time & "                                              <br> "
    	Corpo = Corpo & "                                                                      <br> "
    	Corpo = Corpo & "--------------------------------------------------------------------- <br> " 
    	
    	Set objEmail = CreateObject("CDO.Message")
    	objEmail.From = De
    	objEmail.To = Para
    	objEmail.Subject = Assunto
    	objEmail.HTMLBody = "<p><font size='2' face='Verdana, Arial, Helvetica, sans-serif'>"
    	objEmail.HTMLBody = objEmail.HTMLBody & "<br>"
    	objEmail.HTMLBody = objEmail.HTMLBody & Corpo
    	objEmail.HTMLBody = objEmail.HTMLBody & "<br></fonte></p>"
    	objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    	objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "IP"
    	objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
    	objEmail.Configuration.Fields.Update
    	objEmail.Send   
    
    
    end sub


    Fábio de Paula Junior


    sexta-feira, 13 de julho de 2012 23:08
    Moderador
  • Fabio,

    Estava entrando em loop infinito, devido a definição do nome 'arquivo' em vez de objTextFile.

    Mesmo assim está enviando email com o serviço em execução, o objetivo é enviar email quando o serviço não estiver em execução ou não existe...

    Tem mais alguma sugestão ?

    Grato.


    Joseph Life Style

    segunda-feira, 16 de julho de 2012 11:59
  • José Mário,

    Desculpe, eu não testei o código apenas editei.

    Quanto ao problema que persiste, tente mudar a comparação de Started para Running

     Já corrigi o post.


    Fábio de Paula Junior

    segunda-feira, 16 de julho de 2012 14:06
    Moderador
  • Ok, Obrigado.

    Joseph Life Style

    segunda-feira, 16 de julho de 2012 17:27