我已经在我的计算机(Windows 7 Pro x64,通过 RDP)上设置了远程访问。[WOL] 局域网唤醒功能已在运行,因此我可以将其从睡眠状态唤醒。当我结束远程桌面会话 ( start-menu
-> logout
) 时,计算机只会停留在登录屏幕,不会重新进入睡眠状态。
我想要一个批处理文件(或者真的)我可以从我的远程电脑上执行它来1.
结束(断开连接或注销)RDP 会话并使2.
PC 进入睡眠状态(无需注销用户)。
我尝试设置一个 Windows 任务,让计算机在用户注销 30 秒后进入睡眠状态(无效)。我已经尝试使用批处理文件使其进入睡眠状态,但会话仍在运行,我什么也做不了,只能硬启动我的电脑。
答案1
结束远程桌面会话并待机
创建一个批处理文件(或实际上其他东西),我可以从我的远程 PC 激活它以结束会话并使 PC 进入睡眠状态(不必注销用户)
以下是两个示例脚本:
- 带有
LOGOFF
; 并且, - 另一个使用 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。