如何收集每个服务名称及其在Windows中的状态?

abi*_*964 6 windows windows-7

我想在不使用任何第三方工具的情况下获取所有service_name及其状态.到目前为止,SC命令足以获取其中一个值,例如

sc query | findstr SERVICE_NAME
Run Code Online (Sandbox Code Playgroud)

但我也需要列出STATUS每一个SERVICE_NAME.

Jon*_*Jon 6

这是一个应该完成工作的命令:

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)
Run Code Online (Sandbox Code Playgroud)

这个怎么运作:

首先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
Run Code Online (Sandbox Code Playgroud)

然后将该输出馈送到下一个for /f运行sc query servicename,运行,找到具有状态的行,并隔离第四个"字"(当前状态).

最后,每个服务的名称与其状态一起打印(此时,如果您愿意,您可以选择执行不同的操作).

重要说明:如果在批处理文件中运行,则百分号(例如at %s)需要加倍.