【初心者向け】Windows PowerShellでハイバネーション(休止状態)を設定・解除する方法まとめ

Windows

Windowsの電源管理には、いくつかの選択肢があります。

主な電源状態

  • シャットダウン:完全に電源を切る
  • スリープ:省電力で待機状態
  • 休止状態(ハイバネーション):作業を保存して電源を切る

でも、こんな悩みはありませんか?

  • 「休止状態がメニューに表示されない」
  • 「ノートPCのバッテリーを節約したい」
  • 「作業を保存したまま完全に電源を切りたい」
  • 「PowerShellで電源管理を自動化したい」

この記事では、PowerShellを使ってハイバネーションを自由に操作する方法を、初心者にもわかりやすく説明します。

スポンサーリンク

ハイバネーション(休止状態)とは?

基本的な仕組み

ハイバネーションは、現在のメモリ内容をハードディスク(SSD)に保存してから電源を切る機能です。

何が保存される?

  • 開いているアプリケーション
  • 作業中のドキュメント
  • デスクトップの状態
  • システムの設定

メリット

  • 完全に電源が切れる(バッテリー消費ゼロ)
  • 作業状態が完全に保存される
  • シャットダウンより復帰が早い
  • 電源が切れても安全

他の電源状態との比較

項目シャットダウンスリープハイバネーション
電力消費ゼロ少し使うゼロ
復帰速度遅い(フル起動)高速中間
作業保存なしメモリに保持ディスクに保存
バッテリー切れ問題なし作業が失われる作業は保護される
ディスク使用量なしなしメモリサイズ相当

PowerShellでハイバネーションを有効化する

前準備:管理者権限でPowerShellを起動

手順

  1. スタートメニューで「PowerShell」と検索
  2. 「Windows PowerShell」を右クリック
  3. 「管理者として実行」をクリック
  4. ユーザーアカウント制御(UAC)で「はい」をクリック

または

  1. Windows + Xキーを押す
  2. 「Windows PowerShell(管理者)」をクリック

正しく起動できたか確認

# 管理者権限で実行されているか確認
([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")

結果

True  # 管理者権限で実行されている
False # 一般ユーザー権限(管理者として再起動が必要)

ハイバネーションを有効化する

基本コマンド

powercfg /hibernate on

実行例

PS C:\Windows\system32> powercfg /hibernate on
PS C:\Windows\system32>

実行後の確認

  1. スタートメニューを開く
  2. 電源ボタンをクリック
  3. 「休止状態」が表示されることを確認

設定の確認方法

現在の電源状態を確認

powercfg /a

実行結果(例)

次のスリープ状態がこのシステムで利用可能です:
    スタンバイ (S1)
        スタンバイ (S1) は現在無効です。
    スタンバイ (S3)
    休止状態
    高速スタートアップ
    ハイブリッド スリープ
        スタンバイ (S3) でハイブリッド スリープがサポートされています。

「休止状態」が表示されていれば設定成功です。

ハイバネーションを無効化する

無効化コマンド

基本コマンド

powercfg /hibernate off

実行例

PS C:\Windows\system32> powercfg /hibernate off
PS C:\Windows\system32>

無効化の効果

何が起こる?

  • スタートメニューから「休止状態」が消える
  • hiberfil.sysファイルが削除される
  • ディスク容量が回復する(メモリサイズ分)

無効化する理由

  • ディスク容量を節約したい
  • SSDの書き込み回数を減らしたい
  • デスクトップPCで使わない機能を削除

hiberfil.sysファイルについて

hiberfil.sysとは?

  • ハイバネーション用の保存ファイル
  • Cドライブのルート(C:\hiberfil.sys)に作成
  • サイズはメモリ(RAM)容量とほぼ同じ

例:メモリ16GBの場合

C:\hiberfil.sys のサイズ ≈ 12-16GB

ファイルの確認方法

# hiberfil.sysファイルの確認
Get-ChildItem C:\hiberfil.sys -Force -ErrorAction SilentlyContinue

ハイバネーションを実行する

コマンドで休止状態にする

基本コマンド

shutdown /h

即座に休止状態になるので注意!

代替コマンド

rundll32を使用

rundll32.exe powrprof.dll,SetSuspendState 0,1,0

パラメータの説明

  • 第1引数(0):ハイバネーション(1=スリープ)
  • 第2引数(1):強制実行
  • 第3引数(0):ウェイクアップイベントを無効

スクリプト化の例

安全な休止状態スクリプト

# hibernation.ps1
# 作業を保存してから休止状態にするスクリプト

Write-Host "休止状態に移行します..."
Write-Host "未保存の作業がないか確認してください"

# 5秒間のカウントダウン
for ($i = 5; $i -gt 0; $i--) {
    Write-Host "$i 秒後に休止状態になります..."
    Start-Sleep -Seconds 1
}

# 休止状態の実行
Write-Host "休止状態を実行中..."
shutdown /h

実行方法

.\hibernation.ps1

高度な設定とカスタマイズ

ハイバネーションファイルサイズの調整

サイズの確認

powercfg /query SCHEME_CURRENT SUB_SLEEP HIBERNATEIDLE

サイズを削減(75%に設定)

powercfg /hibernate /size 75

フルサイズに戻す

powercfg /hibernate /size 100

自動ハイバネーション設定

指定時間後に自動ハイバネーション

# 30分後に自動ハイバネーション
powercfg /change hibernate-timeout-ac 30
powercfg /change hibernate-timeout-dc 15

設定の確認

powercfg /query SCHEME_CURRENT SUB_SLEEP HIBERNATEIDLE

電源プランとの連携

現在の電源プランを確認

powercfg /getactivescheme

実行結果(例)

電源設定の GUID: 381b4222-f694-41f0-9685-ff5bb260df2e  (バランス)

電源プラン別設定

# バランスプランの設定
powercfg /setacvalueindex SCHEME_BALANCED SUB_SLEEP HIBERNATEIDLE 1800

# 高パフォーマンスプランの設定  
powercfg /setacvalueindex SCHEME_MIN SUB_SLEEP HIBERNATEIDLE 3600

# 省電力プランの設定
powercfg /setacvalueindex SCHEME_MAX SUB_SLEEP HIBERNATEIDLE 900

タスクスケジューラとの連携

定時ハイバネーションの設定

スクリプト作成

# auto_hibernate.ps1
$currentTime = Get-Date
$targetTime = Get-Date "23:00"

if ($currentTime -gt $targetTime) {
    Write-Host "定時休止状態を実行します"
    shutdown /h
} else {
    Write-Host "まだ定時ではありません"
}

タスクスケジューラでの登録

# タスクの作成
$action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-File C:\Scripts\auto_hibernate.ps1"
$trigger = New-ScheduledTaskTrigger -Daily -At "23:00"
$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries
$principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest

Register-ScheduledTask -TaskName "AutoHibernate" -Action $action -Trigger $trigger -Settings $settings -Principal $principal

トラブルシューティング

よくあるエラーと対処法

エラー1:アクセスが拒否されました

powercfg /hibernate on
アクセスが拒否されました。

対処法

# PowerShellを管理者として再起動
# または
Start-Process PowerShell -Verb RunAs

エラー2:休止状態がサポートされていません

この操作を完了するのに十分な特権がありません。

確認方法

# ハードウェアサポートの確認
powercfg /availablesleepstates

エラー3:ディスク容量不足

ディスク容量が不足しているため休止状態ファイルを作成できません。

対処法

# ディスク使用量の確認
Get-WmiObject -Class Win32_LogicalDisk | Select-Object DeviceID, @{Name="FreeSpace(GB)";Expression={[math]::Round($_.FreeSpace/1GB,2)}}

# 必要に応じてファイルサイズを削減
powercfg /hibernate /size 50

休止状態が実行できない場合

原因の調査

# 電源設定の詳細確認
powercfg /requests

# システムのスリープ阻害要因を確認
powercfg /requestsoverride

一般的な阻害要因

  • 実行中のアプリケーション
  • ネットワーク活動
  • 周辺機器(USB機器など)
  • システムサービス

強制的な休止状態

# プロセスを終了してから休止状態
Stop-Process -Name "chrome" -Force -ErrorAction SilentlyContinue
shutdown /h

実際に使える活用例

バッテリー節約スクリプト

ノートPC用の省電力スクリプト

# battery_saver.ps1
$battery = Get-WmiObject -Class Win32_Battery
$chargeLevel = $battery.EstimatedChargeRemaining

Write-Host "現在のバッテリー残量: $chargeLevel%"

if ($chargeLevel -le 20) {
    Write-Host "バッテリー残量が少ないため、休止状態に移行します"
    shutdown /h
} elseif ($chargeLevel -le 30) {
    Write-Host "バッテリー残量が少なくなっています。作業を保存することをお勧めします"
} else {
    Write-Host "バッテリー残量は十分です"
}

作業終了時の自動化

作業終了チェックスクリプト

# work_end_check.ps1
$processes = @("chrome", "firefox", "code", "notepad", "winword", "excel")
$runningApps = @()

foreach ($process in $processes) {
    if (Get-Process -Name $process -ErrorAction SilentlyContinue) {
        $runningApps += $process
    }
}

if ($runningApps.Count -eq 0) {
    Write-Host "作業用アプリが実行されていません。休止状態に移行します"
    shutdown /h
} else {
    Write-Host "以下のアプリが実行中です: $($runningApps -join ', ')"
    Write-Host "作業を終了してから再実行してください"
}

システム監視との連携

システム負荷監視スクリプト

# system_monitor.ps1
$cpuUsage = (Get-Counter "\Processor(_Total)\% Processor Time").CounterSamples.CookedValue
$memoryUsage = (Get-Counter "\Memory\% Committed Bytes In Use").CounterSamples.CookedValue

Write-Host "CPU使用率: $([math]::Round($cpuUsage, 2))%"
Write-Host "メモリ使用率: $([math]::Round($memoryUsage, 2))%"

# システム負荷が低い場合は休止状態を提案
if ($cpuUsage -lt 5 -and $memoryUsage -lt 50) {
    $response = Read-Host "システム負荷が低いです。休止状態にしますか? (y/n)"
    if ($response -eq "y") {
        shutdown /h
    }
}

セキュリティと注意点

セキュリティ考慮事項

hiberfil.sysの暗号化

# BitLockerが有効か確認
Get-BitLockerVolume -MountPoint "C:"

# hiberfil.sysの暗号化設定
manage-bde -protectors -add C: -TPMAndStartupKey

パスワード保護

# 復帰時のパスワード要求設定
powercfg /setacvalueindex SCHEME_CURRENT SUB_NONE CONSOLELOCK 1
powercfg /setdcvalueindex SCHEME_CURRENT SUB_NONE CONSOLELOCK 1

企業環境での注意点

グループポリシーでの制御

  • 休止状態の無効化ポリシー
  • 電源管理の統一設定
  • セキュリティ要件との兼ね合い

リモートワーク対応

# VPN接続状態の確認
$vpnConnection = Get-VpnConnection -AllUserConnection
if ($vpnConnection.ConnectionStatus -eq "Connected") {
    Write-Host "VPN接続中のため休止状態はスキップします"
    exit
}

まとめ

基本コマンド一覧

操作コマンド説明
有効化powercfg /hibernate on休止状態機能を有効にする
無効化powercfg /hibernate off休止状態機能を無効にする
実行shutdown /hすぐに休止状態に移行
状態確認powercfg /a利用可能な電源状態を表示
サイズ調整powercfg /hibernate /size 75hiberfil.sysサイズを調整

活用場面

個人利用

  • ノートPCのバッテリー節約
  • 作業の中断・再開
  • システムの安定化

企業利用

  • 省電力化による電気代削減
  • セキュリティ向上
  • システム管理の自動化

注意点

使用前の確認

  • 十分なディスク容量の確保
  • 重要な作業の保存
  • システムの安定性確認

セキュリティ

  • hiberfil.sysの暗号化
  • 復帰時の認証設定
  • 企業ポリシーの確認

おわりに

PowerShellを使ったハイバネーション管理は、システム管理の基本スキルの一つです。

この記事で学んだこと

  • ハイバネーションの基本概念
  • PowerShellでの有効化・無効化方法
  • 実際の運用での活用例
  • トラブルシューティング

効果的な活用のために

  • 定期的な設定の見直し
  • システム環境に応じた調整
  • セキュリティ要件との兼ね合い

ハイバネーションを適切に活用することで、電力効率とユーザビリティの両立が実現できます。

まずは基本的な有効化・無効化から始めて、徐々に自動化やカスタマイズに挑戦してみてください!

コメント

タイトルとURLをコピーしました