如何编写 Windows 7“睡眠”命令脚本

如何编写 Windows 7“睡眠”命令脚本

需要澄清的是,当我谈到“睡眠”时,我的意思是混合睡眠,即将 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

我找到了一篇题为命令行混合睡眠这表明您可以使用以下命令:

rundll32 powrprof.dll,SetSuspendState

从那里的评论来看,听起来你还需要确保在电源配置选项中启用了混合睡眠模式,也许激活混合睡眠在 BIOS 中也是如此,具体取决于您的系统。

答案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

相关内容