我想獲取所有的service_name和它的狀態,而不使用任何第三方工具。到目前爲止SC命令是不夠好,取一個值,像如何收集每個服務名稱及其在Windows中的狀態?
sc query | findstr SERVICE_NAME
,但我還需要STATUS
列出的每個SERVICE_NAME
。
我想獲取所有的service_name和它的狀態,而不使用任何第三方工具。到目前爲止SC命令是不夠好,取一個值,像如何收集每個服務名稱及其在Windows中的狀態?
sc query | findstr SERVICE_NAME
,但我還需要STATUS
列出的每個SERVICE_NAME
。
這裏有一個命令應該做的工作:
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"
運行。該命令旨在爲您提供服務名稱,每行一個。插入符號^
(我在此刪除)是必要的,以便轉義您要影響sc
命令而不是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
,找到與狀態的線,和隔離第四「字」(當前狀態)。
最後,打印每個服務的名稱及其狀態(此時可以選擇按照您的意願做不同的事情)。
重要注意事項:如果在批處理文件中運行此項,百分號(例如%s
)需要加倍。
ss64.com/nt/sc.html
sc state= active¦inactive¦all
謝謝非常好的解釋 – abi1964