Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Цитата amazzzing:
Хотелось использовать его как функцию в процедурных языках »
Не нужно. Wbem доступен ещё с Windows 98. Для любого языка, поддерживающего Automation. Пример на WSH, подробно:
читать дальше »
Код: Выделить весь код
Option Explicit

Dim strComputer

Dim objSWbemLocator
Dim objSWbemServicesEx
Dim objSWbemObjectEx


strComputer = "."

Set objSWbemLocator    = WScript.CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServicesEx = objSWbemLocator.ConnectServer(strComputer, "root\cimv2")
Set objSWbemObjectEx   = objSWbemServicesEx.Get("Win32_Service.Name='wuauserv'")

WScript.Echo objSWbemObjectEx.State

Set objSWbemLocator    = Nothing
Set objSWbemObjectEx   = Nothing
Set objSWbemServicesEx = Nothing

WScript.Quit 0

Тот же пример, коротко :
читать дальше »
Код: Выделить весь код
WScript.Echo GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2").Get("Win32_Service.Name='wuauserv'").State


Так, кажется, я всё-таки понял Вашу мысль. Держите процедуру с примерами использования:
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

call :GetServiceState "lanmanserver"
echo lanmanserver: %ServiceState%

call :GetServiceState "wuauserv"
echo wuauserv:     %ServiceState%

call :GetServiceState "bla-bla-bla"
echo bla-bla-bla:  %ServiceState%

endlocal
exit /b 0

:GetServiceState
	setlocal enableextensions enabledelayedexpansion
	set sOut=%~0
	set sServiceName=%~1
	
	for /f "usebackq" %%i in (
		`wmic.exe Service where "Name='%sServiceName%'" get State /value 2^>nul ^| find.exe /i "State"`
	) do set b%%~i
	
	if not defined bState set bState=Not found [%sServiceName%] service
	
	endlocal & set %sOut:~4%=%bState%
	exit /b

Отправлено: 01:41, 30-11-2013 | #2