在同一个txt文件中保存多个条目(Windows服务控制)

时间:2014-10-06 12:51:33

标签: batch-file service cmd

我正在尝试创建一个bat脚本,该脚本将检查不同计算机上不同服务的状态(使用服务控制)并将其输出到文本文件。 例如:

sc (machine name) query eventlog > serviceStatus.txt
sc (machine name) query Wecsvc > serviceStatus.txt

有人可以建议我如何将不同Windows服务的状态输出到同一文本文件中吗? 我尝试用逗号分隔查询,但它似乎不是正确的语法..

我想知道的另一件事: 当我运行上面的代码时,它会输出:

SERVICE_NAME: eventlog 
    TYPE               : 20  WIN32_SHARE_PROCESS  
    STATE              : 4  RUNNING 
                            (STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
    WIN32_EXIT_CODE    : 0  (0x0)
    SERVICE_EXIT_CODE  : 0  (0x0)
    CHECKPOINT         : 0x0
    WAIT_HINT          : 0x0

我看到"状态"跑步时是4。什么是"代码"为什么它停止了?

2 个答案:

答案 0 :(得分:1)

在开始时删除任何现有文件并使用追加模式>>

del serviceStatus.txt 2>nul
sc machineName query eventlog >> serviceStatus.txt
sc machineName query Wecsvc >> serviceStatus.txt

或者对第一个命令使用覆盖模式>,为后续命令使用附加模式

sc machineName query eventlog > serviceStatus.txt
sc machineName query Wecsvc >> serviceStatus.txt

或者将所有命令括在括号中,并使用覆盖模式重定向一次

>serviceStatus.txt (
  sc machineName query eventlog
  sc machineName query Wecsvc
)

或者如果括号使事情变得复杂,那么将所有输出生成命令放在子例程中并使用重定向调用

call :sc >serviceStatus.txt
exit /b

:sc
sc machineName query eventlog
sc machineName query Wecsvc
exit /b

请注意,最后两个选项效率最高。在你的情况下可能不是问题,但是如果在一个长时间的紧密循环中,那么对于整个循环只重定向一次而不是在循环内多次重定向可能会对性能产生很大的影响。

答案 1 :(得分:0)

wmic /node:@"c:\computerlist.txt" /failfast:on Service where "name='eventlog' or name='wscsvc'" get name, pathname, state, status /format:list

查询c:\computerlist.txt中指定的服务器列表。格式如下

127.0.0.1
MyServerA
MyServerB
192.168.0.1

要生成已启用计算机的列表,请键入以下内容

for /f "skip=3 delims=\" %A in ('net view ^| findstr /v /C:"The command completed successfully"') do Echo %A > C:\ComputerList.txt

Win32_Service类在此处记录https://msdn.microsoft.com/en-us/library/aa394418(v=vs.85).aspx。虽然wmic内置了完整的帮助。wmic /?wmic service get /?wmic service call /?

输入wmic /format /?以获取格式列表

这是/format:list

Name=EventLog
PathName=C:\Windows\System32\svchost.exe -k LocalServiceNetworkRestricted
State=Running
Status=OK


Name=wscsvc
PathName=C:\Windows\System32\svchost.exe -k LocalServiceNetworkRestricted
State=Running
Status=OK

这是/format:csv

Node,Name,PathName,State,Status
127.0.0.1,EventLog,C:\Windows\System32\svchost.exe -k LocalServiceNetworkRestricted,Running,OK
127.0.0.1,wscsvc,C:\Windows\System32\svchost.exe -k LocalServiceNetworkRestricted,Running,OK

还有HTML输出选项。试试hform