3

Для пояснения, когда я говорю о «спящем режиме», я имею в виду «гибридный спящий режим», т. Е. Сохранить содержимое оперативной памяти в файл гибернации, а затем перейти в режим ожидания.

У меня это прекрасно работает через меню «Пуск», но я хочу написать его в виде чего-то, что может быть запущено планировщиком задач. Отлично, пакетный сценарий или сценарий Powershell будет хорошо работать

Я экспериментировал с PowrProf SetSuspendState и powercfg -h off в сценариях без удачи, он всегда просто переходит в режим ожидания или в спящий режим и полностью отключается.

3 ответа3

4

Я нашел статью под названием Комбинированный спящий режим командной строки, в которой говорится, что вы можете использовать следующую команду:

rundll32 powrprof.dll,SetSuspendState

Судя по комментариям, вы также должны убедиться, что гибридный режим сна включен в параметрах конфигурации электропитания и, возможно, также активировать гибридный режим сна в BIOS, в зависимости от вашей системы.

3

Я нашел свое решение из этого ОЧЕНЬ полезного ответа пользователя @jnL (пожалуйста, подтвердите его вклад!) Он работает на моем win7 HP lappy и заставляет его "спать" так же, как если бы я выбрал Sleep в графическом интерфейсе Windows Start Menu, т.е.

Keeps your session in memory and puts the computer in
a low-power state so that you can quickly resume
working.

Теперь, когда я добавил этот сценарий в свой профиль PowerShell C:\Users\ имя_пользователя \ 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

1

Используя скрипт, упомянутый в предыдущем ответе, я переписал его, чтобы улучшить его удобство использования. Сохраните его как модуль 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .