Πώς να ελέγξετε αν μια υπηρεσία τρέχει από τη γραμμή εντολών

ψήφοι
42

Θα ήθελα να είναι σε θέση να διερωτηθεί κατά πόσον ή όχι μια υπηρεσία εκτελείται από ένα αρχείο παράθυρα παρτίδα. Ξέρω ότι μπορώ να χρησιμοποιήσω:

ερώτημα sc «όνομα_υπηρεσίας»

αλλά, αυτό χωματερές από κάποιο κείμενο. Αυτό που θέλω πραγματικά είναι για να ορίσετε τη errorlevelμεταβλητή περιβάλλοντος, έτσι ώστε να μπορώ να αναλάβουν δράση σε αυτό.

Ξέρετε έναν απλό τρόπο μπορώ να το κάνω αυτό;

UPDATE
Ευχαριστώ για τις απαντήσεις μέχρι τώρα. Είμαι ανησυχούν οι λύσεις που να αναλύσει το κείμενο ενδέχεται να μην λειτουργούν σε μη λειτουργικά συστήματα αγγλικά. Ξέρει κανείς έναν τρόπο γύρω από αυτό, ή θα πάω να πρέπει να επιμείνει στις προσπάθειές της και να γράψει ένα πρόγραμμα κονσόλας για να πάρει αυτό το δικαίωμα.

Δημοσιεύθηκε 09/12/2008 στις 16:37
πηγή χρήστη
Σε άλλες γλώσσες...                            


14 απαντήσεις

ψήφοι
65

sc query "ServiceName" | find "RUNNING"
Απαντήθηκε 09/12/2008 στις 16:46
πηγή χρήστη

ψήφοι
14

Ας πάμε πίσω στο παλιό σχολείο του προγραμματισμού παρτίδα στα παράθυρα

net start | find "Service Name"

Αυτό θα λειτουργήσει παντού ...

Απαντήθηκε 23/03/2011 στις 15:22
πηγή χρήστη

ψήφοι
8

αν δεν σας πειράζει να συνδυάσει την καθαρή εντολή με grep μπορείτε να χρησιμοποιήσετε το ακόλουθο σενάριο.

@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
Απαντήθηκε 09/12/2008 στις 16:48
πηγή χρήστη

ψήφοι
4

Θα μπορούσατε να χρησιμοποιήσετε wmic με το / locale επιλογή

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
)
Απαντήθηκε 28/12/2008 στις 20:05
πηγή χρήστη

ψήφοι
2
ερώτημα sc "SERVICENAME" | findstr ΚΡΑΤΟΣ

για παράδειγμα:

ερώτημα sc "wuauserv" | findstr ΚΡΑΤΟΣ

Για να αναφέρετε τι κάνει η υπηρεσία ενημέρωσης των Windows, τρέχει / παύση κ.λπ.
Αυτό είναι επίσης για τα Windows 10. μένα ευχαριστώ αργότερα.

Απαντήθηκε 01/12/2016 στις 05:08
πηγή χρήστη

ψήφοι
2

Θα προτεινα WMIC Service WHERE "Name = 'SericeName'" GET Started

ή WMIC Service WHERE "Name = 'ServiceName'" GET ProcessId(Αναγνωριστικό διεργασίας θα είναι μηδέν, αν η υπηρεσία δεν έχει ξεκινήσει)

Μπορείτε να ρυθμίσετε το επίπεδο σφάλματος ανάλογα με το αν ο πρώην επιστρέφει «TRUE» ή ο τελευταίος επιστρέφει μη μηδενική

Απαντήθηκε 14/12/2012 στις 21:27
πηγή χρήστη

ψήφοι
2

Σκεπτόμενος λίγο έξω από το κουτί εδώ Πάω να προτείνω αυτό το PowerShell μπορεί να είναι μια απάντηση σε up-to-ημερομηνία μηχανές XP / 2003 και, βεβαίως, για Vista / 2008 και νεότερα (αντί .bat / .cmd). Όποιος έχει κάποια Perl στο παρασκήνιο τους θα πρέπει να αισθάνονται σαν στο σπίτι πολύ γρήγορα.


$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";
}

Ένας άλλος τρόπος, αν έχετε σημαντικές επενδύσεις σε παρτίδα είναι να εκτελέσετε το σενάριο PS ως ένα σκάφος της γραμμής, επιστρέφουν ένα κωδικό εξόδου.


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

ECHO.%ERRORLEVEL%

Τρέξιμο ως ένα σκάφος της γραμμής γίνεται επίσης σε όλο τον προεπιλεγμένο PS πολιτική Κωδικός υπογραφή σε βάρος των ακαταστασία. Για να βάλετε το PS εντολές σε ένα αρχείο .ps1 και να τρέξει όπως powershell myCode.ps1μπορείτε να διαπιστώσετε την υπογραφή σενάρια PowerShell σας είναι απαραίτητες για την εκτέλεσή τους με αυτοματοποιημένο τρόπο (εξαρτάται από το περιβάλλον σας). Δείτε http://www.hanselman.com/blog/SigningPowerShellScripts.aspx για λεπτομέρειες

Απαντήθηκε 20/07/2009 στις 21:48
πηγή χρήστη

ψήφοι
1

Έχω διαπιστώσει ότι αυτό:

  sc query "ServiceName" | findstr RUNNING  

φαίνεται να κάνει περίπου το σωστό. Όμως, φοβάμαι ότι δεν είναι γενικευμένη αρκετά για να εργαστούν σε μη αγγλικά λειτουργικά συστήματα.

Απαντήθηκε 09/12/2008 στις 16:48
πηγή χρήστη

ψήφοι
1

Προσπαθήστε

sc query state= all 

για μια λίστα των υπηρεσιών και το αν λειτουργεί ή όχι.

Απαντήθηκε 09/12/2008 στις 16:47
πηγή χρήστη

ψήφοι
0

Παρατήρησα κανείς δεν αναφέρουν την χρήση κανονικών εκφράσεων κατά τη χρήση find/ findstr-με βάση απαντήσεις. Αυτό μπορεί να είναι προβληματική για παρόμοιο όνομα υπηρεσιών.

Ας υποθέσουμε ότι έχετε δύο υπηρεσίες, CDPUserSvcκαιCDPUserSvc_54530

Εάν χρησιμοποιείτε περισσότερες από τις find/ findstr-με βάση απαντήσεις εδώ μέχρι τώρα, θα έχετε ψευδώς θετικά για CDPUserSvcερωτήματα που μόνο CDPUserSvc_54530τρέχει.

Η /rκαι /cδιακόπτες για findstrνα μας βοηθήσει να χειριστεί ότι η χρήση χωριστά, καθώς και τον ειδικό χαρακτήρα που δείχνει το τέλος της γραμμής,$

Αυτό το ερώτημα θα ελέγξει μόνο τη λειτουργία της CDPUserSvcυπηρεσίας και να αγνοήσειCDPUserSvc_54530

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

Απαντήθηκε 13/02/2018 στις 05:45
πηγή χρήστη

ψήφοι
0

Χρησιμοποιήστε Cygwin Bash με:

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

(Βεβαιωθείτε ότι έχετε sc.exeστο PATH σας.)

Απαντήθηκε 18/12/2017 στις 08:02
πηγή χρήστη

ψήφοι
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
Απαντήθηκε 23/12/2016 στις 02:42
πηγή χρήστη

ψήφοι
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
Απαντήθηκε 05/12/2016 στις 18:53
πηγή χρήστη

ψήφοι
0

Ακριβώς για να προσθέσετε στη λίστα αν χρησιμοποιείτε Powershell.

sc.exe query "ServiceName" | findstr RUNNING

Η εντολή παρακάτω δεν λειτουργεί, διότι scείναι ένα ψευδώνυμο για Set-Content μέσα Powershell.

sc query "ServiceName" | findstr RUNNING

find Επίσης, δεν λειτουργεί για Powershell για κάποιο λόγο άγνωστο σε μένα.

sc.exe query "ServiceName" | find RUNNING
Απαντήθηκε 04/08/2016 στις 09:07
πηγή χρήστη

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