コマンドラインからWindows PCを停止(スリープなど)する方法


コマンドでPCをスリープや休止状態にする方法を紹介します。リモートデスクトップで接続中はスタートメニューで「ログオフ」、「切断」、「ロック」しか選択できないため、ここで紹介する方法が役に立つことがあります。

逆にリモートのマシンを起動したい場合には、以下の記事をご覧ください。
Wake On Lan についてのまとめ (リモートのマシンを起動)

リモートデスクトップで接続中に Ctrl + Alt + End を押すと、接続先で Ctrl + Alt + Del を押した場合と同様に、シャットダウンや再起動、スリープを選択・実行できます。デスクトップで Alt + F4 でも良いです。

P8Z68 等のマザーボードでは、BIOSの設定で internal PLL overvoltage を Disable にしないとスリープから復帰できないようです。私の環境ではスリープからの復帰時に画面が映りませんでした。(P8Z68-V PRO)

シャットダウン

shutdown コマンドで可能です。

> shutdown /s

30秒後にシャットダウンします。

スリープ・休止 (お勧めしない方法)

以下のコマンドでスリープまたは休止状態へ移行できます。

> rundll32.exe PowrProf.dll,SetSuspendState
  • 休止状態機能が有効だと休止状態になります。
  • 休止状態機能が無効だとハイブリッドスリープではなく、従来のスタンバイの様な状態になります。

お勧めしない理由

  • この方法でスリープへ移行した場合、ハイブリッドスリープにはなりません。 したがって、電源が切れるとメモリ上のデータが失われます。
  • この方法でスリープ(スタンバイ)へ移行した場合、タスクスケジューラからの自動復帰ができないことがあるようです。
    手元の Windows7 では問題なく自動復帰できることを確認しました。

■休止状態機能の有効・無効を切り替える方法

コマンドプロンプトを管理者として実行し、次のコマンドを入力する。

  • 有効にする場合

    > powercfg /hibernate on
  • 無効にする場合

    > powercfg /hibernate off
  • 現在の設定を確認する場合

    > powercfg /a

スリープ・休止 (お勧めの方法)

PowrProf.dll の SetSuspendState 関数を適切なパラメータを指定して呼び出します。
この方法だとタスクスケジューラからの自動復帰も問題ありませんし、ハイブリッドスリープと休止を自由に使い分けることができます。

以下の Ruby スクリプトにより可能です。
ダウンロードしてご利用ください。拡張子が exe の方であれば、Ruby をインストールしていなくても実行できます。(Exerbで変換したものです。)

  • スリープモードへ移行する場合
    require "fiddle/import"
    require 'fiddle/types'

    module Powrprof
        extend Fiddle::Importer

        dlload 'powrprof.dll'
        include Fiddle::Win32Types

        extern "BOOL SetSuspendState(BOOL, BOOL, BOOL)"
    end

    Powrprof.SetSuspendState(0, 0, 0)
    require 'Win32API'

    Win32API.new('powrprof.dll', 'SetSuspendState', %w(i i i), 'i').call(0, 0, 0)

    ダウンロード

  • 休止状態へ移行する場合
    require "fiddle/import"
    require 'fiddle/types'

    module Powrprof
        extend Fiddle::Importer

        dlload 'powrprof.dll'
        include Fiddle::Win32Types

        extern "BOOL SetSuspendState(BOOL, BOOL, BOOL)"
    end

    Powrprof.SetSuspendState(1, 0, 0)
    require 'Win32API'

    Win32API.new('powrprof.dll', 'SetSuspendState', %w(i i i), 'i').call(1, 0, 0)

    ダウンロード

パラメータの詳細についてはこちらを参照
http://msdn.microsoft.com/en-us/library/aa373201(v=vs.85).aspx

Rubyスクリプトを実行するにはあらかじめRubyをインストールしておく必要があります。
http://www.ruby-lang.org/ja/downloads/#label-1

カテゴリー: 記事 タグ: , , , パーマリンク

コマンドラインからWindows PCを停止(スリープなど)する方法 への8件のフィードバック

  1. ピンバック: 2011年08月01日(月)の日常 - okaz::だめにっき

  2. Daisuke のコメント:

    悩みがこのページで解決しました

    「スリープ・休止 (お勧めしない方法)」で おっしゃる通り タスクスケジューラからの自動復帰(2003Server)が出来なくて困っていたところでした 「hibernate.exe」を使わせていただいた所  問題なく 自動休止→タスクスケジューラ自動復帰 が出来ました ありがとうございます

  3. ピンバック: Wake On Lan についてのまとめ | TipsZone

  4. nodahi のコメント:

    Windows8で「suspend.exe」を利用させていただき、大変便利です。 有益な情報・技術を本当にありがとうございました。

  5. ピンバック: スタンバイからのWake On LAN 有効化パッチ thinkpad

  6. kimtaka のコメント:

    私もタスクスケジューラからの自動復帰(WindowsXP)が出来なくて、困ってました。たすかりました、ありがとうございます。

  7. 匿名 のコメント:

    すばらしいです。通常のGUIでのSUSPENDから復帰するのはうまくいくのに、rundll32.exe だと失敗するので困っていました。ありがとうございました。

  8. 佐々木睦男 のコメント:

    suspend.exe 発見して試してみました。使わせていただきます。必要なので助かりました。

コメントを残す