我想在不使用任何第 3 方工具的情况下获取所有 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 |查找“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
,找到具有状态的行,并隔离第 4 个“字”(当前状态)。
最后,每个服务的名称连同它的状态被打印出来(此时您可以根据需要选择做一些不同的事情)。
重要说明:如果您在批处理文件中运行它,则百分号(例如 %s
)需要加倍。
关于windows - 如何在 Windows 中收集每个服务名称及其状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12172997/