我有一个计划任务,它启动了一个.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最高,这应该工作。
提前致谢=)
答案 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