やりたいこと
【営業時間外はPCの電源を切りたい】
- 毎朝8時にPC自動起動
- 自作Pythonプログラム自動起動
- 毎日23時に電源オフ
課題
【自動シャットダウンはできるが、自動起動ができない】
- 自動シャットダウンはタスクスケジューラやPythonプログラムから実行できる。
- しかし、シャットダウンしてしまうと、翌朝の起動ができない。
- BIOSにタイマー起動(Wake On LAN)のないPCの場合、どうしようもないのかとあきらめかけた。
解決策
【Windowsの休止を活用する】
◆発見 休止状態でもタスクスケジューラは動作する◆
- タスクスケジューラで休止から復帰し、その後、タスクスケジューラで再起動させる。
- こうすれば、毎日自動シャットダウン・自動起動を繰り返すことと同等のことが可能。
具体的な方法
- 休止状態に入る、次のようなバッチファイルを作成
sleep.bat
@echo off
cd C:\tool\PSTools\
psshutdown.exe -d -t 10
echo "10s後にスリープします"
psshutdown.exeについて
こちらから導入しました。
https://learn.microsoft.com/ja-jp/sysinternals/downloads/psshutdown
こちらのようなコマンドでは、復帰できませんでした。
C:\>shutdown -s -t 0
-
sleep.batを実行すると、「このアプリが PC に変更を加えることを許可しますか?」というユーザーアカウント制御のポップアップが表示されれるため、自動的には実行できない。そのため、タスクスケジューラの機能を利用する。
-
以下のバッチファイルを作成(バッチファイルから登録したタスクを実行させる)
sleep_task.bat
@echo off
schtasks /run /tn スリープ実行
-
sleep_task.batを実行すると、ユーザーアカウント制御のポップアップを回避できる。
-
sleep_task.batを自作Pythonプログラム内から、毎日23:00に実行させるようにした。
タスクスケジューラで休止状態から復帰させる方法
- タスクスケジューラに「毎日8:00に実行する」というトリガーで再起動コマンドを登録し、「タスクを実行するためにスリープを解除する」にチェックを入れる。
shutdown -r -t 0
- スリープ解除タイマーの許可をする。
コントロール パネル→すべてのコントロール パネル項目→電源オプション→プラン設定の編集で「詳細な電源設定の変更」をクリックして開くダイアログ画面で、「スリープ→スリープ解除タイマの許可」で「バッテリ駆動」「電源に接続」ともに「有効」に変更します。
- これにより、毎朝8:00に休止状態から自動復帰、そのまま再起動するようになる。
自作Pythonプログラムをタスクスケジューラまたはスタートアップ機能を使って、PC起動時に自動実行させる。
以上の設定で完成
- 毎朝8時にPC自動起動
- 自作Pythonプログラム自動起動
- 毎日23時に電源オフ
が実現できた。