结束远程桌面会话并待机

结束远程桌面会话并待机

我已经在我的计算机(Windows 7 Pro x64,通过 RDP)上设置了远程访问。[WOL] 局域网唤醒功能已在运行,因此我可以将其从睡眠状态唤醒。当我结束远程桌面会话 ( start-menu-> logout) 时,计算机只会停留在登录屏幕,不会重新进入睡眠状态。

我想要一个批处理文件(或者真的)我可以从我的远程电脑上执行它来1.结束(断开连接或注销)RDP 会话并使2.PC 进入睡眠状态(无需注销用户)

我尝试设置一个 Windows 任务,让计算机在用户注销 30 秒后进入睡眠状态(无效)。我已经尝试使用批处理文件使其进入睡眠状态,但会话仍在运行,我什么也做不了,只能硬启动我的电脑。

答案1

结束远程桌面会话并待机

创建一个批处理文件(或实际上其他东西),我可以从我的远程 PC 激活它以结束会话并使 PC 进入睡眠状态(不必注销用户)


以下是两个示例脚本:

  1. 带有LOGOFF; 并且,
  2. 另一个使用 RDP DISCONNECT(无注销)

我不确定您是否想要其中一个,因此我将两者都放在下面,根据我的测试,它们在 Windows 7 上应该可以正常工作。

对于注销脚本,我放置了一些 if 逻辑来不注销控制台、系统或 rdp-tpc 监听会话,因为您只对 RDP 连接的远程会话感兴趣。

对于断开脚本,您只需根据需要断开运行它的会话,因此不需要额外的逻辑(这可能是你需要的)

假设您将手动将其作为已保存的批处理脚本运行,如果您决定使用注销脚本而不是断开连接脚本,则您将有权注销所有或任何适用的会话。


批处理脚本

(此脚本还将在当前会话断开连接后等待 5 秒,然后让 PC 进入睡眠状态。)

批处理脚本示例(DISCONNECT所有会话)

@ECHO OFF

::: Disconnected current RDP session
TSDISCON 

::: Pause 5seconds before going to sleep ensuring enough time 
PING -n 5 127.0.0.1 > NUL

::: Put computer to sleep
%systemroot%\System32\rundll32.exe powrprof.dll,SetSuspendState 0,1,0

GOTO EOF

(此脚本还将在注销所有会话后等待 30 秒,然后让 PC 进入睡眠状态。)

警告: 此脚本无法通过双击此批处理文件来临时运行,以满足 OP 的需要,但我将其保留在这里作为奖励项目,以防有人发现它有用。由于它会在睡眠逻辑运行之前注销帐户,因此该睡眠逻辑在特定情况下不起作用。这需要从任务计划程序运行,并且with Highest Privileges——Run whether the user is logged on or not我认为您可以以这种方式设置,而不是按计划进行设置,也可以根据需要从任务计划程序启动/运行。(下面的屏幕截图)

批处理脚本示例(LOGOFF所有会话)

@ECHO OFF

FOR /F %%S IN (

    '"QUERY SESSION /SM"'

) DO (

IF NOT %%~S==0 IF NOT %%~S==1 IF NOT %%~S==65536 RWINSTA %%~S

)

::: Pause 5 seconds before going to sleep ensuring enough time 
PING -n 5 127.0.0.1 > NUL

::: Put computer to sleep
%systemroot%\System32\rundll32.exe powrprof.dll,SetSuspendState 0,1,0

GOTO EOF

屏幕截图计划任务选项

在此处输入图片描述


进一步的研究、阅读和资料来源

答案2

请尝试以下操作:在 RDP 会话中单击桌面上的空白处,然后按 Alt+F4。您将看到旧的“电源”菜单,然后从那里您可以强制计算机进入睡眠状态,这当然也会断开您的 RDP。

相关内容