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

我想获取所有的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" 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 ,找到该行的状态,隔离第4个“word”(当前状态)。

最后,每个服务的名称会随着其状态一起打印(此时,如果您愿意,您可以选择做一些不同的事情)。

重要说明:如果你在一个批处理文件中运行这个,百分号(如%s )需要加倍。

ss64.com/nt/sc.html

 sc state= active¦inactive¦all