Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Проверка состояния службы. Возврат значения из CMD. Непредвиденное появление. (http://forum.oszone.net/showthread.php?t=273072)

amazzzing 29-11-2013 23:09 2264105

Проверка состояния службы. Возврат значения из 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


Iska 30-11-2013 01:41 2264169

Цитата:

Цитата 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.

Время: 17:31.
© OSzone.net 2001-