|
|
本帖最后由 qq8899399 于 2025-12-12 13:00 编辑
解决办法
1 用批处理创建一个计划任务(你也可以手工计划任务控制台手工添加,但那样不是麻烦么) 远程会话断开后执行指定任务(比如run.bat)代码如下
- @ECHO Off
- REM https://msdn.microsoft.com/zh-cn/library/windows/desktop/bb736357(v=vs.85).aspx
- PUSHD %~dp0
- TITLE Hello World
- >nul reg add hkcu\software\classes\.Admin\shell\runas\command /f /ve /d "cmd /x /d /r set "f0=%%2" &call "%%2" %%3" & set "_= %*"
- >nul fltmc || if "%f0%" neq "%~f0" ( cd.>"%tmp%\runas.Admin" & start "%~n0" /high "%tmp%\runas.Admin" "%~f0" "%_:"=""%" &exit /b )
- ::创建计划任务
- ::任务名称,断开远程桌面后自动执行任务
- ::任务内容,执行当前目录下run.bat批处理
- ::创建计划任务
- powershell -ExecutionPolicy Bypass -NoProfile -Command ^
- "$TaskPath = '\';" ^
- "$TaskName = '断开远程桌面后自动执行任务';" ^
- "$exePath = "%CD%\run.bat";" ^
- "$argument = ' ';" ^
- "$action = New-ScheduledTaskAction -Execute $exePath -Argument $argument;" ^
- "$trigger = @();" ^
- "$trigger += New-ScheduledTaskTrigger -AtLogOn -User "%USERNAME%";" ^
- "$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -ExecutionTimeLimit 0;" ^
- "Register-ScheduledTask -TaskPath $TaskPath -TaskName $TaskName -Action $action -Trigger $trigger -Settings $settings -RunLevel Highest -Force;" ^
- "$service = New-Object -ComObject Schedule.Service;" ^
- "$service.Connect();" ^
- "$comFolder = $service.GetFolder($TaskPath);" ^
- "$comTask = $comFolder.GetTask($TaskName);" ^
- "$comTaskDef = $comTask.Definition;" ^
- "$comTaskDef.Triggers.Clear();" ^
- "$t = $comTaskDef.Triggers.Create(11);" ^
- "$t.StateChange = 4;" ^
- "$t.Enabled = $true;" ^
- "$comTaskDef.Principal.UserId = 'SYSTEM';" ^
- "$comTaskDef.Principal.RunLevel = 1;" ^
- "$comFolder.RegisterTaskDefinition($TaskName, $comTaskDef, 6, 'SYSTEM', $null, 5);" ^
- "Write-Host '成功创建计划任务';"
- echo.
- cls
- ::清理临时文件
- del /f /q "%cd%\Bin\Temp\*.*"
- ECHO.&ECHO 创建完成,任意键关闭!&pause>nul &exit
复制代码 2 RUN.BAT批处理代码如下
- @ECHO OFF
- PUSHD %~dp0
- TITLE Hello World
- >nul reg add hkcu\software\classes\.Admin\shell\runas\command /f /ve /d "cmd /x /d /r set "f0=%%2" &call "%%2" %%3" & set "_= %*"
- >nul fltmc || if "%f0%" neq "%~f0" ( cd.>"%tmp%\runas.Admin" & start "%~n0" /high "%tmp%\runas.Admin" "%~f0" "%_:"=""%" &exit /b )
- set "LOG_FILENAME=%TEMP%\restore_console_log.txt"
- echo %date% %time% 开始执行脚本 >> %LOG_FILENAME%
- rem 定义要尝试的会话 ID 列表
- set "session_ids=1 2 3 4 5 6 7 8 9"
- for %%i in (%session_ids%) do (
- echo 尝试连接会话 ID %%i 到控制台 >> %LOG_FILENAME%
- tscon %%i /dest:console /v >> %LOG_FILENAME% 2>&1
- if %errorlevel% equ 0 (
- echo 会话 ID %%i 连接成功 >> %LOG_FILENAME%
- ) else (
- echo 会话 ID %%i 连接失败,错误码:%errorlevel% >> %LOG_FILENAME%
- )
- )
- echo %date% %time% 脚本执行结束 >> %LOG_FILENAME%
复制代码
刚才已经 实机测试通过
|
|