読者です 読者をやめる 読者になる 読者になる

がりらぼ

WindowsRuntimeの応援ブログ

PowerShellからコンピュータをスリープさせる

PowerShell

PowerShellからスリープさせたい

PowerShellを使っていて思うのは、 Stop-ComputerコマンドレットやRestart-Computerコマンドレットがあるのにコンピュータをスリープさせるコマンドレットがありません。

やっぱりサーバー運用目的なのかよくわかりませんが、クライアントPCでPowerShell使ってる時にコマンドレットでスリープさせれたら最高なので調べました。

牟田口大先生のブログによるとやはりスリープさせるコマンドレットは無いらしい。

そこでpoweroff.dllのSetSuspendState関数を呼び出してスリープさせるらしい。

$signature = @"
[DllImport("powrprof.dll")]
public static extern bool SetSuspendState(bool Hibernate,bool ForceCritical,bool DisableWakeEvent);
"@
$func = Add-Type -memberDefinition $signature -namespace "Win32Functions" -name "SetSuspendStateFunction" -passThru
$func::SetSuspendState($false,$false,$false)

スリープ状態に移行する - PowerShell Scripting Weblog

とりあえずコレを.ps1拡張子スクリプトファイルに記述してテキトーなディレクトリにおきます。

f:id:garicchi:20141129012711p:plain

これで、カレントディレクトリを移動させてスクリプトを呼び出せばスリープできます。

PS C:\Users\Ryota> cd C:\Users\Ryota\Scripts
PS C:\Users\Ryota\Scripts> ./suspend.ps1

実行権限がない場合は以下のコマンドを管理者権限のPowerShellで実行して外部スクリプトの実行許可をしてください。

Set-ExecutionPolicy RemoteSigned

エイリアスを作成する

スリープするためにいちいちカレントディレクトリを移動させるのは面倒なのでエイリアスを作成しちゃいましょう。

C:\Users\{UserName}\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

このディレクトリにあるプロファイルスクリプト(ない場合は作ってください)に、以下のコマンドレットを追加します。

Set-Alias Suspend C:\Users\Ryota\Scripts\suspend.ps1

スリープさせるスクリプトのパスは各自変更させてください。

ここまでできたら、あとは普通に以下のコマンドレットでスリープできます。

Suspend