Проверка состояния службы. Возврат значения из CMD. Непредвиденное появление.
Есть CMD из которого надо получить результат состояния службы. Хотелось использовать его как функцию в процедурных языках :)
При работе результат выдает верный, но перед ним выводит "Непредвиденное появление"
Хотелось бы чтобы просто выдавал числовое значение.
В параметрах имя сервера и службы передаю в кавычках.
Код:
@echo off
for /f "tokens=1,4" %%i in ('sc %~1 query %~2') do (
if "%%i"=="Состояние" (
if "%%j"=="RUNNING" (set do=0) else (set do=1)
)
)
rem service is NOT running!
if %do% EQU 1 > 0
rem service is running.
if %do% EQU 0 > 1
rem service state unknown.
if %do% EQU 0 > -1
|
Цитата:
Цитата 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
|
Время: 17:31.
© OSzone.net 2001-