如果停止没有窗口,如何让VBS脚本启动服务?

时间:2014-06-05 00:11:52

标签: vbscript

我有一个计划任务,它启动了一个.vbs文件,它启动一个没有窗口的批处理文件,检查服务是否正在运行,如果没有,则启动它。我有.vbs启动批处理文件的原因是批处理文件没有弹出窗口。我遇到的问题是,当我通过.vbs运行批处理时,我被拒绝访问,所以我想在.vbs脚本中运行整个系统,以检查服务是否已启动或正在运行,如果没有启动它。此外,我使用schtasks来运行带有/ RL最高的.vbs,因此我没有被拒绝访问,但是当.vbs启动批处理文件时,批处理文件没有权限并被拒绝访问。

我输入的计划任务命令:

    schtasks /CREATE /TN "OpenTunnel" /TR "C:\BTools\OpenTunnel\Invisable_OpenTunnel.vbs" /sc minute /mo 10 /RU ***** /RP ***** /RL HIGHEST

这是运行的批处理文件并检查服务状态。

for /F "tokens=3 delims=: " %%H in ('sc query "Hamachi2Svc" ^| findstr "        STATE"') do (
  if /I "%%H" NEQ "RUNNING" (
   net start "Hamachi2Svc"
  )
)

以下是.vbs的代码,它使批处理无窗口:

Set WinScriptHost = CreateObject("WScript.Shell")
WinScriptHost.Run Chr(34) & "opentunnel.bat" & Chr(34),0
Set WinScriptHost = Nothing

因此,如果我以管理员身份运行批处理,它是否有效,但是有没有办法让每隔10分钟运行一次.vbs会执行与批处理文件类似的操作?一个.vbs文件毕竟是最好的,我可以授予它/ RL最高,这应该工作。

提前致谢=)

1 个答案:

答案 0 :(得分:0)

使用WMI(特别是Win32_Service类):

Set wmi = GetObject("winmgmts://./root/cimv2")

qry = "SELECT * FROM Win32_Service WHERE Name = 'Hamachi2Svc'"
For Each svc In wmi.ExecQuery(qry)
  If svc.State <> "Running" Then svc.StartService
Next