none
Status de serviço especifico. RRS feed

  • Pergunta

  • Boa tarde.

    Ba galera estou trabalhando neste script abaixo, e o mesmo faz uma saida de todos os serviços encontrados na maquina, porem gostarida de fazer algo nele para que ele so reporte os 4 serviços abaixo, e o resultado seja somente o Status do serviço.

    McAfee McShield : RUNNING ;
    Tivoli Endpoint : RUNNING ;
    Windows Update : RUNNING ;
    Serviço de transferência inteligente de plano de fundo : RUNNING ;

    Codigo

    on error resume Next
     
    Dim objFSO, outFile, strTextFile, strData, host
     
    'Criação do txt com nome do host para relatório.
     strFileName = "c:\maquina.txt"
     
    Set objFSO = CreateObject("Scripting.FileSystemObject")
     Set outFile = objFSO.OpenTextFile(strFileName, 2, True)
     
    strComputer = "."

    'SERVIÇOS DO WINDOWS
    Set objWMIService = GetObject("winmgmts:" _
     & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
     
    Set colRunningServices = objWMIService.ExecQuery("Select * from Win32_Service")
     
    For Each objService in colRunningServices
    strSaida=""

     strSaida = strSaida & ucase(objService.State) & " ; "

     outFile.WriteLine objService.DisplayName & " : " & strSaida

    Next

     

    sexta-feira, 7 de outubro de 2011 16:11

Respostas

  • Marcelo,
    Veja que vc utiliza WMI para pegar as informações de todos os serviços, o WMI funciona como um banco de dados das informações do computador, inclusive ele utiliza uma linguagem similar ao SQL.
    No seu script vc utiliza o comando "Select * from Win32_Service", isto é, ele pega todos os campos (*) da tabela Win32_Service.
    O que vou fazer é pegar todos os campos da tabela mas filtrando as linha que tem o campo displayname igual a um dos serviços que vc precisa.
    No final das contas ficaria uma consulta assim:
    Select * from Win32_Service WHERE DisplayName = 'McAfee McShield' OR DisplayName = 'Tivoli Endpoint' OR DisplayName = 'Windows Update' OR DisplayName = 'Serviço de transferência inteligente de plano de fundo'
    assim ele traz só o que vc precisa.
    Você também poderia ter feito um IF dentro do Foreach, mas esta forma que passei é melhor porque o for each vai fazer 4 interações, utilizando o IF ele rodaria tantas vezes fosse a quantidade de serviços que vc tem na máquina para imprimir somente 4 linhas.
     
    on error resume Next
      
    Dim objFSO, outFile, strTextFile, strData, host
      
    'Criação do txt com nome do host para relatório.
    strFileName = "c:\maquina.txt"
      
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set outFile = objFSO.OpenTextFile(strFileName, 2, True)
    
    strComputer = "."
    
    'SERVIÇOS DO WINDOWS
    Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    
    filtro = " WHERE DisplayName = 'McAfee McShield' OR DisplayName = 'Tivoli Endpoint' OR " & _
                "DisplayName = 'Windows Update' OR DisplayName = 'Serviço de transferência inteligente de plano de fundo'"
    
    Set colRunningServices = objWMIService.ExecQuery("Select * from Win32_Service" & filtro)
    
    For Each objService in colRunningServices 
    	strSaida=""
    
    	strSaida = strSaida & ucase(objService.State) & " ; "
    
    	outFile.WriteLine objService.DisplayName & " : " & strSaida
    
    Next
    

    Fábio de Paula Junior

    sábado, 8 de outubro de 2011 13:10
    Moderador
  • Na ultima linha é só isso:

    outFile.WriteLinestrSaida


    Se ainda assim não resolver, poste um exemplo de como seria uma linha de sáida.

    Talvez vc ainda tenha que mexer na linha que fica dentro do for each.

    Fábio de Paula Junior

    quinta-feira, 13 de outubro de 2011 01:08
    Moderador

Todas as Respostas

  • Marcelo,
    Veja que vc utiliza WMI para pegar as informações de todos os serviços, o WMI funciona como um banco de dados das informações do computador, inclusive ele utiliza uma linguagem similar ao SQL.
    No seu script vc utiliza o comando "Select * from Win32_Service", isto é, ele pega todos os campos (*) da tabela Win32_Service.
    O que vou fazer é pegar todos os campos da tabela mas filtrando as linha que tem o campo displayname igual a um dos serviços que vc precisa.
    No final das contas ficaria uma consulta assim:
    Select * from Win32_Service WHERE DisplayName = 'McAfee McShield' OR DisplayName = 'Tivoli Endpoint' OR DisplayName = 'Windows Update' OR DisplayName = 'Serviço de transferência inteligente de plano de fundo'
    assim ele traz só o que vc precisa.
    Você também poderia ter feito um IF dentro do Foreach, mas esta forma que passei é melhor porque o for each vai fazer 4 interações, utilizando o IF ele rodaria tantas vezes fosse a quantidade de serviços que vc tem na máquina para imprimir somente 4 linhas.
     
    on error resume Next
      
    Dim objFSO, outFile, strTextFile, strData, host
      
    'Criação do txt com nome do host para relatório.
    strFileName = "c:\maquina.txt"
      
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set outFile = objFSO.OpenTextFile(strFileName, 2, True)
    
    strComputer = "."
    
    'SERVIÇOS DO WINDOWS
    Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    
    filtro = " WHERE DisplayName = 'McAfee McShield' OR DisplayName = 'Tivoli Endpoint' OR " & _
                "DisplayName = 'Windows Update' OR DisplayName = 'Serviço de transferência inteligente de plano de fundo'"
    
    Set colRunningServices = objWMIService.ExecQuery("Select * from Win32_Service" & filtro)
    
    For Each objService in colRunningServices 
    	strSaida=""
    
    	strSaida = strSaida & ucase(objService.State) & " ; "
    
    	outFile.WriteLine objService.DisplayName & " : " & strSaida
    
    Next
    

    Fábio de Paula Junior

    sábado, 8 de outubro de 2011 13:10
    Moderador
  • Ba Fabio

    Obrigado mais uma vez, vou testar tche e retorno logo.

     

    sábado, 8 de outubro de 2011 18:34
  • Ba Fabião

    Obrigado pela grande aula, aprendi muito desta vez mais uma vez, e tb rolou legal como o esperado, mais acho que não me dei bem com a ultima aula, pois tente fazer o resultado sair em uma unica linha com o strSaida como vc me mostrou em uma outra oportunidade de ajuda, mais não consegui acerta tche, vc pode me dar uma ultima ajuda.

    obrigado.

    sábado, 8 de outubro de 2011 18:44
  • Apaga a linha strSaida="" e tira outFile.WriteLine objService.DisplayName & " : " & strSaida para depois do next.

    Vai ficar quase pronto!


    Fábio de Paula Junior
    • Marcado como Resposta Marcelo TI terça-feira, 11 de outubro de 2011 23:53
    • Não Marcado como Resposta Marcelo TI quarta-feira, 12 de outubro de 2011 00:00
    segunda-feira, 10 de outubro de 2011 11:43
    Moderador
  • Fabio

    Valeu por mais uma grande aula tche, mais não me dei bem não, ele não escreve no texto ?

    onerrorresumeNext
      
    Dim objFSO, outFile, strTextFile, strData, host
      
    'Criação do txt com nome do host para relatório.
    strFileName = "c:\maquina.txt"
      
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set outFile = objFSO.OpenTextFile(strFileName, 2, True)

    strComputer = "."

    'SERVIÇOS DO WINDOWS
    Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

    filtro = " WHERE DisplayName = 'McAfee McShield' OR DisplayName = 'Tivoli Endpoint' OR " & _            
    "DisplayName = 'Atualizações Automáticas' OR DisplayName = 'Serviço de transferência inteligente de plano de fundo'"
    Set colRunningServices = objWMIService.ExecQuery("Select * from Win32_Service" & filtro)

    ForEach objServicein colRunningServices
        strSaida = strSaida & ucase(objService.State) & " ; "
    Next
        outFile.WriteLine objService.DisplayName & " : " & strSaida


    • Editado Marcelo TI quarta-feira, 12 de outubro de 2011 00:03 correção
    terça-feira, 11 de outubro de 2011 23:53
  • Na ultima linha é só isso:

    outFile.WriteLinestrSaida


    Se ainda assim não resolver, poste um exemplo de como seria uma linha de sáida.

    Talvez vc ainda tenha que mexer na linha que fica dentro do for each.

    Fábio de Paula Junior

    quinta-feira, 13 de outubro de 2011 01:08
    Moderador
  • Fabio

    valeu ombre obrigado tche, era o que eu estava buscando hehehehe

    sábado, 15 de outubro de 2011 21:20
  • pessoal, to com um problema parecido:

     

    o meu script da erro na hora de mostrar na tela o resultado

    ele coloca cada linha em uma posicao (i) do array, depois ele busca no Win32_Service e mostra na tela o estado do serviço, esse final nao ta funcionando!! podem me ajudar??

     

    conteudo do arquivo servicos.txt

     

    DNS

    eTrust Audit Action Manager

    eTrust Audit Distribution Agent

    eTrust Audit Log Router

    eTrust Audit Portmap

    eTrust Audit Redirector

    FcpClient

    FCPServer

    IISADMIN

    MQSeriesServices

    TermService  

     

     

    conteudo do arquivo servicos_win.vbs

    Dim arrFileLines()

    i = 0

    Set objFSO = CreateObject("Scripting.FileSystemObject")

    Set objFile = objFSO.OpenTextFile("c:\servicos.txt", 1)

     

    Do Until objFile.AtEndOfStream

      '

          Redim Preserve ArrFileLines(i)

     arrFileLines(i) = objFile.ReadLine

     i = i + 1

     

    Loop

     

     

    objFile.Close

     

     

     

    ' servicos windows

    Set objWMIService = GetObject("winmgmts:" _

    & "{impersonationLevel=impersonate}!\\")

     

    For l = Ubound(arrFileLines) to LBound(arrFileLines) Step -1

      filtro = "WHERE DisplayName = "& arrFileLines(l) &"" 

     

      Set colRunningServices =  objWMIService.ExecQuery("Select * from Win32_Service"  & filtro )

        For Each objService in colRunningServices

         strServiceList = strServiceList & VbCr & objService.name & vbTab & objService.state & vbCr

        Next  

     Next

     

    Wscript.Echo strServiceList

    sexta-feira, 16 de dezembro de 2011 14:17