需要澄清的是,当我谈到“睡眠”时,我的意思是混合睡眠,即将 RAM 的内容保存到休眠文件,然后进入待机模式。
我通过开始菜单可以完美地运行它,但我想以可以由任务计划程序运行的形式编写脚本。exe、批处理脚本或 Powershell 脚本都可以
我尝试过PowrProf SetSuspendState
各种powercfg -h off
脚本,但都没有成功,它总是直接进入待机或休眠状态,然后完全关闭
答案1
我从中找到解决方案这个答案很有帮助由用户 @jnL 提供(请为他的贡献点赞!)它可以在我的 win7 HP 笔记本电脑上运行,并使其“休眠”,就像我Sleep
从 Windows 开始菜单 GUI 中选择一样,即
Keeps your session in memory and puts the computer in a low-power state so that you can quickly resume working.
现在我已将此脚本添加到我的 PowerShell 配置文件 C:\Users\user_name\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
function sleepy_time {
Add-Type -AssemblyName System.Windows.Forms
$PowerState = [System.Windows.Forms.PowerState]::Suspend;
$Force = $false;
$DisableWake = $false;
[System.Windows.Forms.Application]::SetSuspendState($PowerState, $Force, $DisableWake);
}
new-alias -name nap -value sleepy_time
...当我nap
在 PowerShell 提示符下输入时,我的笔记本电脑进入睡眠状态,风扇旋转下来,然后当我移动鼠标或按下空格键(等等...)时,它会唤醒到登录屏幕。
请注意,rundll32.exe解决方案显然破坏了堆栈,根据注释此主题用户@accolade 引用此答案:https://superuser.com/a/331545/21887
答案2
答案3
使用之前回答中提到的脚本,我重写了它以提高它的可用性。将其作为 powershell 模块 (.psm1) 保存到系统配置文件文件夹 ($PsHome\Profile.ps1)。
然后创建一个计划任务,在您想要让计算机进入睡眠状态时运行。在操作选项卡中设置您想要的参数。
例子:
Powershell -ExecutionPolicy Bypass -NoLogo -NonInteractive -Command "& {nap -PowerState Hibernate}"
function Suspend_Computer {
<#
.Synopsis
Sets the computer to a specified power mode.
.Description
The computer will be placed either in sleep or hibernation modes.
.Example
C:\PS>Suspend_Computer
Description
-----------
The command will run using default parameters which are not force the action of Suspend.
.Example
C:\PS>Suspend_Computer -Force $True -PowerState Hibernate
Description
-----------
The computer will save all data to disk and hibernate.
.Link
https://superuser.com/questions/505247/how-to-script-the-windows-7-sleep-command
#>
Param(
[Parameter(Mandatory =$False,Position=0)]
$Force = $False,
[Parameter(Mandatory=$False,Position=1)]
$DisableWake = $False,
[Parameter(Mandatory=$False,Position=2)]
[ValidateSet("Suspend","Hibernate")]
[string]$PowerState = 'Suspend'
)
Add-Type -AssemblyName System.Windows.Forms
$PowerState = [System.Windows.Forms.PowerState]::$PowerState;
[System.Windows.Forms.Application]::SetSuspendState($PowerState, $Force, $DisableWake);
}
new-alias -name nap -value Suspend_Computer