PCをスリープモードや休止状態にする Powershell スクリプト

PCで何か長時間かかる処理をさせたあとで、自動でスリープモードになってほしいときがありました。

これをPowershellでできるようにしてみました。

遠隔地にある Windows PCにSSHで入っているときにも使えます…が、そんなことしてるひといるかな?

使うときはこんな感じで。

# この場合だと、即座にスリープモードに入ります
Start-Suspend -To Sleep

# 10分待機したあとでスリープする
Start-Sleep -Seconds $(60*10); Start-Suspend -To Sleep

# このようにすると、マウスやキー入力でスリープモードが解除されないようにできる
Start-Suspend -To Sleep -DisableWakeupEvents

# 休止状態にしたいときは↓
Start-Suspend -To Hibernate

以下、スクリプト

function Start-Suspend {
    Param (
        [parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [ValidateSet("Sleep", "Hibernate", IgnoreCase)]
        [string]$To,
        [switch]$Force,
        [switch]$DisableWakeupEvents
    )

    $signature = @'
[DllImport("powrprof.dll")]
public static extern bool SetSuspendState(
    bool bHibernate, bool bForce, bool bWakeupEventsDisabled
);
'@
    Add-Type -Namespace MyNameSpace -Name Power `
        -MemberDefinition $signature -ErrorAction SilentlyContinue

    $isHibernate = $To.ToLower() -eq "hibernate"
    [MyNameSpace.Power]::SetSuspendState(
        $isHibernate, $Force, $DisableWakeupEvents) `
    | Out-Null
}