Usuário com melhor resposta
Status de serviço especifico.

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
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
- Editado Fábio JrModerator sábado, 8 de outubro de 2011 13:11
- Sugerido como Resposta Fábio JrModerator segunda-feira, 10 de outubro de 2011 11:43
- Não Sugerido como Resposta Marcelo TI quarta-feira, 12 de outubro de 2011 00:00
- Sugerido como Resposta Fábio JrModerator sexta-feira, 14 de outubro de 2011 15:10
- Marcado como Resposta Fábio JrModerator quinta-feira, 27 de outubro de 2011 10:55
-
Na ultima linha é só isso:
outFile.WriteLine strSaida
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
- Editado Fábio JrModerator quinta-feira, 13 de outubro de 2011 01:21
- Sugerido como Resposta Fábio JrModerator sexta-feira, 14 de outubro de 2011 15:10
- Marcado como Resposta Marcelo TI sábado, 15 de outubro de 2011 21:19
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
- Editado Fábio JrModerator sábado, 8 de outubro de 2011 13:11
- Sugerido como Resposta Fábio JrModerator segunda-feira, 10 de outubro de 2011 11:43
- Não Sugerido como Resposta Marcelo TI quarta-feira, 12 de outubro de 2011 00:00
- Sugerido como Resposta Fábio JrModerator sexta-feira, 14 de outubro de 2011 15:10
- Marcado como Resposta Fábio JrModerator quinta-feira, 27 de outubro de 2011 10:55
-
-
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.
-
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
-
Fabio
Valeu por mais uma grande aula tche, mais não me dei bem não, ele não escreve no texto ?
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 = '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)
For Each objService in 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
-
Na ultima linha é só isso:
outFile.WriteLine strSaida
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
- Editado Fábio JrModerator quinta-feira, 13 de outubro de 2011 01:21
- Sugerido como Resposta Fábio JrModerator sexta-feira, 14 de outubro de 2011 15:10
- Marcado como Resposta Marcelo TI sábado, 15 de outubro de 2011 21:19
-
-
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