none
Adaptar script para verificar status do serviço e versão do S.O RRS feed

  • Pergunta

  • Preciso de uma ajuda para adaptar o script abaixo. Misturei dois scripts mas esta ocorrendo erro na linha 9,  caractere 1. Já tentei diversas variações e não consegui ainda.

    Minha intenção é que ele valide se a versão do sistema operacional é diferente de XP (5.1.2600)  e portanto, deverá validar se o status do serviço TabletInputService é igual é Running e se válido, deverá executar o "wshshell.run ("calc.exe")".

    Se a versão do S.O for XP, deverá executar o "wshshell.run ("notepad.exe")" independente da existência ou status do serviço.

    Set dtmConvertedDate = CreateObject("WbemScripting.SWbemDateTime")
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set oss = objWMIService.ExecQuery ("Select * from Win32_OperatingSystem")
    'Set oss =  objWMIService.ExecQuery _
    '		("Select * from Win32_OperatingSystem Where Version = '5.1.2600'")
    
    
    strComputer = "."
    Set WshShell = CreateObject("WScript.Shell")
    set objFso=createObject("scripting.fileSystemObject")
    set objWShell=wScript.createObject("WScript.Shell")
    usrName=objWShell.expandEnvironmentStrings("%USERPROFILE%")
    
    Set objWMIService = GetObject("winmgmts:" _
        & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    
    Set colRunningServices =  objWMIService2.ExecQuery _
    		("Select * from Win32_Service Where Name = 'TabletInputService'")
    
    if os.Version <> "5.1.2600" then
    	For Each objService in colRunningServices
    		if objService.State <> "Running" Then
    		wshshell.run ("calc.exe")
    else
    		wshshell.run ("notepad.exe")
    end if
    
    Next
    end if

    Obrigado,

    terça-feira, 29 de julho de 2014 10:16

Respostas

  • Tinham vários erros, tentei simplificar.

    strComputer="."
    
    'Pega versão do SO
    For Each objOS in GetObject("winmgmts:").InstancesOf ("Win32_OperatingSystem")
    	strVersao = objOS.Version
    Next
    
    
    Set WshShell = CreateObject("WScript.Shell")
    if strVersao <> "5.1.2600" then
    	'Verifique o status do serviço
    	Set objWMIService = GetObject("winmgmts:" _
    		& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    	Set colRunningServices =  objWMIService.ExecQuery _
    		("Select * from Win32_Service Where Name = 'TabletInputService'")
    	for each Service in colRunningServices
    		strStatus=Service.state
    	next
    		
    	wscript.echo strStatus
    	if strStatus="Running" then
    		wshshell.run ("calc.exe")
    	end if
    	
    else
    	wshshell.run ("notepad.exe")
    end if

    Algumas dicas.

    1) Use os loop para primeiro pegar a informação, e em seguida use a informação, acho mais fácil e mais legível.

    2) quando você vai ler informações WMI você precisa de um loop foreach para pegar as informações. Você fez isso para o Serviço mas não fez para o SO.

    3) Você criou o objWMIService  corretamente, depois tentou ler o wmi usando objWMIService2 


    Fábio de Paula Junior



    • Editado Fábio JrModerator terça-feira, 29 de julho de 2014 14:10
    • Marcado como Resposta K.ryn terça-feira, 29 de julho de 2014 16:32
    terça-feira, 29 de julho de 2014 14:02
    Moderador

Todas as Respostas

  • Tinham vários erros, tentei simplificar.

    strComputer="."
    
    'Pega versão do SO
    For Each objOS in GetObject("winmgmts:").InstancesOf ("Win32_OperatingSystem")
    	strVersao = objOS.Version
    Next
    
    
    Set WshShell = CreateObject("WScript.Shell")
    if strVersao <> "5.1.2600" then
    	'Verifique o status do serviço
    	Set objWMIService = GetObject("winmgmts:" _
    		& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    	Set colRunningServices =  objWMIService.ExecQuery _
    		("Select * from Win32_Service Where Name = 'TabletInputService'")
    	for each Service in colRunningServices
    		strStatus=Service.state
    	next
    		
    	wscript.echo strStatus
    	if strStatus="Running" then
    		wshshell.run ("calc.exe")
    	end if
    	
    else
    	wshshell.run ("notepad.exe")
    end if

    Algumas dicas.

    1) Use os loop para primeiro pegar a informação, e em seguida use a informação, acho mais fácil e mais legível.

    2) quando você vai ler informações WMI você precisa de um loop foreach para pegar as informações. Você fez isso para o Serviço mas não fez para o SO.

    3) Você criou o objWMIService  corretamente, depois tentou ler o wmi usando objWMIService2 


    Fábio de Paula Junior



    • Editado Fábio JrModerator terça-feira, 29 de julho de 2014 14:10
    • Marcado como Resposta K.ryn terça-feira, 29 de julho de 2014 16:32
    terça-feira, 29 de julho de 2014 14:02
    Moderador
  • Fábio, 

    O script funcionou perfeitamente, como sempre... 

    Novamente você me ajudando. Agradeço imensamente, inclusive pelas dicas que são muito úteis.

    Obrigado,

    terça-feira, 29 de julho de 2014 16:39