Bir hizmet komut satırından çalışır durumda olup olmadığını nasıl test etmek

oy
42

Bir hizmet bir windows toplu iş dosyasından çalıştığı olsun veya olmasın sorgulayamaz istiyorum. Ben kullanabilirsiniz biliyorum:

sc sorgu ServiceName

ancak, bu miktar metin boşaltıyor. Ne istiyorum gerçekten o ayarlamak içindir errorlevelbu konuda harekete geçebilir, böylece ortam değişkeni.

Eğer bunu yapabilirim basit bir yol biliyor musunuz?

GÜNCELLEME
şimdiye kadar yanıtlar için teşekkür ederiz. Ben metin ayrıştırmak çözümler olmayan İngilizce işletim sistemlerinde çalışmayabilir endişeleniyorum. Herkes bu etrafında bir yol biliyor mu, yoksa kurşun ısırık ve bu hakkı almak için bir konsol programı yazmak zorunda gidiyorum.

Oluştur 09/12/2008 saat 16:37
kaynak kullanıcı
Diğer dillerde...                            


14 cevaplar

oy
65

sc query "ServiceName" | find "RUNNING"
Cevap 09/12/2008 saat 16:46
kaynak kullanıcı

oy
1

Deneyin

sc query state= all 

hizmetlerin listesi için ve onlar çalışıyor olsun veya olmasın.

Cevap 09/12/2008 saat 16:47
kaynak kullanıcı

oy
8

Eğer grep net komutu birleştirmek için sakıncası yoksa size şu komut dosyasını kullanabilirsiniz.

@echo off
net start | grep -x "Service"
if %ERRORLEVEL% == 2 goto trouble
if %ERRORLEVEL% == 1 goto stopped
if %ERRORLEVEL% == 0 goto started
echo unknown status
goto end
:trouble
echo trouble
goto end
:started
echo started
goto end
:stopped
echo stopped
goto end
:end
Cevap 09/12/2008 saat 16:48
kaynak kullanıcı

oy
1

Bu tespit ettik:

  sc query "ServiceName" | findstr RUNNING  

kabaca doğru olanı yapmak gibi görünüyor. Ama ben olmayan ingilizce işletim sistemleri üzerinde çalışmak için yeterli genelleştirilmiş değil endişeliyim.

Cevap 09/12/2008 saat 16:48
kaynak kullanıcı

oy
4

Sen ile wmic kullanabilirsiniz / yerel seçeneği

call wmic /locale:ms_409 service where (name="wsearch") get state /value | findstr State=Running
if %ErrorLevel% EQU 0 (
    echo Running
) else (
    echo Not running
)
Cevap 28/12/2008 saat 20:05
kaynak kullanıcı

oy
2

Burada kutunun dışında biraz düşünerek ben Vista / 2008 ve daha yeni (yerine .bat / .cmd ait) üzerinde kesinlikle yukarı güncel XP / 2003 makinelerde bir cevap olabileceğini powershell önermek için gidiyorum ve. Onların arka planda bazı Perl olan herkes oldukça hızlı evde hissetmelisiniz.


$serviceName = "ServiceName";
$serviceStatus = (get-service "$serviceName").Status;

if ($serviceStatus -eq "Running") {
    echo "Service is Running";
}
else {
    #Could be Stopped, Stopping, Paused, or even Starting...
    echo "Service is $serviceStatus";
}

Eğer toplu önemli yatırımlar varsa başka yolu da, bir çıkış kodunu döndürerek, tek astar olarak PS komut dosyası çalıştırmaktır.


@ECHO off
SET PS=powershell -nologo -command
%PS% "& {if((get-service SvcName).Status -eq 'Running'){exit 1}}"

ECHO.%ERRORLEVEL%

Tek astar olarak çalıştırılması da messiness pahasına varsayılan PS kod imzalama politikası yayılıyor. PS bir .ps1 dosyasında komutları koymak ve benzeri çalıştırmak için powershell myCode.ps1sizin powershell komut dosyalarını imzalamak otomatik bir şekilde çalıştırmak için gerekli olduğunu bulabilir size (ortamınıza bağlıdır). Bkz http://www.hanselman.com/blog/SigningPowerShellScripts.aspx detaylar için

Cevap 20/07/2009 saat 21:48
kaynak kullanıcı

oy
14

en pencerelerde toplu programlamayla eski okuluna geri dönelim

net start | find "Service Name"

Bu her yerde çalışacak ...

Cevap 23/03/2011 saat 15:22
kaynak kullanıcı

oy
2

öneririm WMIC Service WHERE "Name = 'SericeName'" GET Started

veya WMIC Service WHERE "Name = 'ServiceName'" GET ProcessId(hizmet başlamış değilse Processıd sıfır olacaktır)

Sen dayalı hata düzeyini ayarlayabilirsiniz olmadığını eski döner "DOĞRU" veya ikincisi döner sıfırdan farklı

Cevap 14/12/2012 saat 21:27
kaynak kullanıcı

oy
0

Eğer PowerShell kullanıyorsanız Sadece listesine eklemek için.

sc.exe query "ServiceName" | findstr RUNNING

Aşağıda çünkü çalışmıyor komut scSet-İçerik için PowerShell içinde bir diğer adıdır.

sc query "ServiceName" | findstr RUNNING

find bana da bilinmeyen bir nedenle PowerShell üzerinde çalışmaz.

sc.exe query "ServiceName" | find RUNNING
Cevap 04/08/2016 saat 09:07
kaynak kullanıcı

oy
2
sc sorgu "hizmetadı" | findstr DEVLET

Örneğin:

sc sorgu "wuauserv" | findstr DEVLET

Windows güncelleme hizmeti çalışıyor, ne yaptığını bildirmek için / vb duraklatılmış
Bu aynı zamanda, Windows 10 içindir Sonra teşekkür.

Cevap 01/12/2016 saat 05:08
kaynak kullanıcı

oy
0
SERVICO.BAT
@echo off
echo Servico: %1
if "%1"=="" goto erro
sc query %1 | findstr RUNNING
if %ERRORLEVEL% == 2 goto trouble
if %ERRORLEVEL% == 1 goto stopped
if %ERRORLEVEL% == 0 goto started
echo unknown status
goto end
:trouble
echo trouble
goto end
:started
echo started
goto end
:stopped
echo stopped
goto end
:erro
echo sintaxe: servico NOMESERVICO
goto end

:end
Cevap 05/12/2016 saat 18:53
kaynak kullanıcı

oy
0
@ECHO OFF
REM testing at cmd : sc query "MSSQLSERVER" | findstr RUNNING
REM "MSSQLSERVER" is the name of Service for sample
sc query "MSSQLSERVER" %1 | findstr RUNNING
if %ERRORLEVEL% == 2 goto trouble
if %ERRORLEVEL% == 1 goto stopped
if %ERRORLEVEL% == 0 goto started
echo unknown status
goto end
:trouble
echo Oh noooo.. trouble mas bro
goto end
:started
echo "SQL Server (MSSQLSERVER)" is started
goto end
:stopped
echo "SQL Server (MSSQLSERVER)" is stopped
echo Starting service
net start "MSSQLSERVER"
goto end
:erro
echo Error please check your command.. mas bro 
goto end

:end
Cevap 23/12/2016 saat 02:42
kaynak kullanıcı

oy
0

Kullanım Cygwin Bash ile:

sc query "SomeService" |grep -qo RUNNING && echo "SomeService is running." || echo "SomeService is not running!"

(Eğer olduğundan emin olun sc.exePATH içinde.)

Cevap 18/12/2017 saat 08:02
kaynak kullanıcı

oy
0

Ben kullanırken kimse normal ifadelerin kullanımını söz ettim find/ findstrtabanlı Yanıtlar. Yani benzer adlara hizmetler için sorunlu olabilir.

Eğer iki hizmet var demek, Lets CDPUserSvcveCDPUserSvc_54530

Eğer en kullanırsanız find/ findstrburada şimdiye kadar tabanlı Yanıtlar, sizin için yanlış pozitif alırsınız CDPUserSvcyalnızca sorguları CDPUserSvc_54530çalışıyor.

/rVe /ciçin anahtarlar findstrbize hattın sonuna gösterir kullanım senaryosunu yanı sıra özel karakteri işlemek yardımcı olabilir,$

Bu sorgu yalnızca çalışmasını doğrular CDPUserSvcservis ve görmezdenCDPUserSvc_54530

sc query|findstr /r /c:"CDPUserSvc$"

Cevap 13/02/2018 saat 05:45
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more