2012-08-29 4 views
5

मैं किसी भी तृतीय पक्ष टूल का उपयोग किये बिना सभी service_name और इसकी स्थिति लेना चाहता हूं। अब तक SC आदेश काफी अच्छा में से एक मान, जैसेविंडोज़ में प्रत्येक सेवा का नाम और इसकी स्थिति कैसे एकत्र करें?

sc query | findstr SERVICE_NAME 

कुछ लाने के लिए था, लेकिन मैं भी एक SERVICE_NAME सूचीबद्ध के लिए STATUS की जरूरत है।

for /f "tokens=2" %s in ('sc query state^= all ^| find "SERVICE_NAME"') do 
    @(for /f "tokens=4" %t in ('sc query %s ^| find "STATE  "') do @echo %s is %t) 

यह कैसे काम करता:

पहले sc query state= all | find "SERVICE_NAME" चलाया जाता है

उत्तर

6

यहाँ एक आदेश है कि काम करना चाहिए। यह आदेश आपको प्रति पंक्ति एक सेवा नाम देने के लिए डिज़ाइन किया गया है। कमांड को प्रभावित करने के लिए विशेष वर्णों से बचने के लिए देखभाल ^ (जिसे मैंने यहां हटा दिया है) आवश्यक हैं, न कि for कमांड।

फिर प्रारंभिक for /f प्रत्येक सेवा से मानक "SERVICE_NAME:" उपसर्ग को हटाने के लिए उपर्युक्त आउटपुट को पार करता है, जिससे आपको शुद्ध सेवा नाम मिलते हैं। इस बिंदु पर उत्पादन इस तरह दिखता है:

C:\>for /f "tokens=2" %s in ('sc query state^= all ^| find "SERVICE_NAME"') do @echo %s 
AdobeFlashPlayerUpdateSvc 
AeLookupSvc 
ALG 
AppIDSvc 
Appinfo 
AppMgmt 
aspnet_state 
AudioEndpointBuilder 
AudioSrv 

यह आउटपुट तो अगले for /f, जो sc query servicename चलाता है के लिए तंग आ गया है, राज्य के साथ लाइन पाता है, और 4 "शब्द" (वर्तमान स्थिति) को अलग कर देता।

अंत में, प्रत्येक सेवा का नाम अपने राज्य के साथ मुद्रित होता है (इस बिंदु पर आप चाहें तो कुछ अलग करना चुन सकते हैं)।

महत्वपूर्ण नोट: यदि आप इसे बैच फ़ाइल के अंदर चलाते हैं, तो प्रतिशत संकेत (उदा। %s) को दोगुनी करने की आवश्यकता है।

+0

धन्यवाद बहुत अच्छा स्पष्टीकरण भी – abi1964

1

ss64.com/nt/sc.html

sc state= active¦inactive¦all 
संबंधित मुद्दे