检查windows系统是否空闲,正在运行后台脚本
本文关键字:运行 后台 脚本 windows 系统 是否 检查 | 更新日期: 2023-09-27 18:08:58
这可能是一个奇怪的问题。但是我必须这样做。
实际上,我们正在尝试执行uitest作为持续集成目的的一部分。问题:当testagent机器空闲一段时间后,桌面被锁定,测试开始失败。我们不能删除防止系统被锁定的安全功能。这违反了我们公司的政策。
我们的解决方案我们将定期检查系统(windows 8/2008)是否空闲,如3分钟左右,如果它是空闲的,那么我们将触发一个vbs脚本来执行num键的点击。3分钟后,我们再次检查系统是否空闲并决定。整个目标是防止系统被锁定。
您可能想知道这是否也违反了安全规定。当安全成人发生时,他们会看到是否有任何windows功能被禁用,而不是我们是否在后台运行脚本以保持系统活跃。
所以任何人都知道如何通过批处理文件/c#来实现上述场景。欢迎提出其他工作建议。帮助感激。
谢谢,VVP
你可以在vbscript中使用sendkeys来模拟每3分钟点击一次NumLock:
Option Explicit
If AppPrevInstance() Then
MsgBox "There is an existing proceeding !" & VbCrLF &_
CommandLineLike(WScript.ScriptName),VbExclamation,"There is an existing proceeding !"
WScript.Quit
Else
Dim ws : Set ws = CreateObject("WScript.Shell")
Do
ws.SendKeys "{NUMLOCK}"
Pause 3 ' To sleep for 3 minutes
Loop
End If
'********************************************************************************************
Sub Pause(min)
Wscript.Sleep(1000 * 60 * min)
End Sub
'*********************************************************************************************
Function AppPrevInstance()
With GetObject("winmgmts:" & "{impersonationLevel=impersonate}!''.'root'cimv2")
With .ExecQuery("SELECT * FROM Win32_Process WHERE CommandLine LIKE " & CommandLineLike(WScript.ScriptFullName) & _
" AND CommandLine LIKE '%WScript%' OR CommandLine LIKE '%cscript%'")
AppPrevInstance = (.Count > 1)
End With
End With
End Function
'*********************************************************************************************
Function CommandLineLike(ProcessPath)
ProcessPath = Replace(ProcessPath, "'", "''")
CommandLineLike = "'%" & ProcessPath & "%'"
End Function
'*********************************************************************************************