求助:实现后台循环运行的VBScript远程桌面连接日志脚本
改进后的远程连接监控VBS脚本(后台运行+日志记录)
看来你已经搭好了远程连接监控的基础框架,现在只需要完善后台循环逻辑、会话状态检测和日志写入的细节就行。我帮你调整并补全了脚本,解决了后台运行和精准记录的需求:
Option Explicit ' 初始化对象 Dim objFSO, myLog, oShell, lastSession, currentSession, logPath, timestamp ' 设置日志文件路径(可自行修改为目标路径) logPath = "rdcmonitor.log" ' 创建文件系统对象和日志文件(追加模式,避免覆盖原有日志) Set objFSO = CreateObject("Scripting.FileSystemObject") Set myLog = objFSO.OpenTextFile(logPath, 8, True) Set oShell = CreateObject("WScript.Shell") ' 初始会话设为本地控制台 lastSession = "CONSOLE" ' 记录脚本启动日志 timestamp = Now() myLog.WriteLine "[" & timestamp & "] 远程连接监控脚本启动" myLog.Close ' 后台循环监控会话状态 While True ' 每秒检测一次会话状态 WScript.Sleep 1000 ' 获取当前活动会话名称 currentSession = GetActiveSession() ' 仅当会话状态变化时写入日志,避免冗余记录 If currentSession <> lastSession Then timestamp = Now() ' 重新以追加模式打开日志文件 Set myLog = objFSO.OpenTextFile(logPath, 8, True) If currentSession = "CONSOLE" Then myLog.WriteLine "[" & timestamp & "] 远程连接已断开,恢复本地控制台会话" Else myLog.WriteLine "[" & timestamp & "] 检测到远程连接,会话名称: " & currentSession End If myLog.Close ' 更新上一次会话状态 lastSession = currentSession End If Wend ' 自定义函数:获取系统当前活动会话名称 Function GetActiveSession() Dim objExec, strOutput, arrLines, line, sessionName, arrParts ' 执行系统命令获取会话列表 Set objExec = oShell.Exec("query session") strOutput = objExec.StdOut.ReadAll() arrLines = Split(strOutput, vbCrLf) ' 解析命令输出,筛选出活动状态的会话 For Each line In arrLines line = Trim(line) ' 跳过标题行和空行 If InStr(line, "SESSIONNAME") = 0 And line <> "" Then arrParts = Split(line, " ") ' 过滤拆分后的空元素 arrParts = Filter(arrParts, "") ' 检查会话状态是否为Active(活动状态) If UBound(arrParts) >= 2 And arrParts(2) = "Active" Then sessionName = arrParts(0) ' 控制台会话的会话名为空,统一标记为CONSOLE If sessionName = "" Then sessionName = "CONSOLE" End If GetActiveSession = sessionName Exit Function End If End If Next ' 未找到活动会话时默认返回控制台 GetActiveSession = "CONSOLE" End Function
关键改进说明
- 日志写入优化:把原脚本的日志打开模式从
2(覆盖写入)改为8(追加写入),确保每次记录都保留历史日志,不会被清空。 - 精准会话检测:新增
GetActiveSession()函数,通过执行query session系统命令来获取真实的会话状态,能准确识别远程RDP会话(通常命名为RDP-Tcp#X)和本地控制台会话。 - 状态触发日志:只有当会话状态发生变化时才写入日志,避免每秒重复记录相同状态,减少日志冗余。
- 后台运行方法:要让脚本静默后台运行,不要用WScript.exe执行(会弹出窗口),而是用命令行运行:
如果需要开机自动启动,可以把这个命令添加到Windows任务计划中,设置为开机触发。cscript //nologo your_script_name.vbs - 健壮性可选优化:如果想让脚本更稳定,可以在循环开头添加
On Error Resume Next,并捕获可能的错误(比如query session命令执行失败),防止脚本意外崩溃。
内容的提问来源于stack exchange,提问作者Brkdrk
相关产品推荐
相关产品推荐

