このページの本文へ

Windows Info 第231回

Windows 10で電力プラン情報を取得する

2020年07月05日 10時00分更新

文● 塩田紳二 編集● ASCII

  • この記事をはてなブックマークに追加
  • 本文印刷

PowerShellからexeコマンドを実行すると、その出力をPowerShellで直接操作できるようになる

 Windowsでは、電源プランに従って、ディスプレイをオフにしたり、スリープ状態に入るまでのアイドル時間を決めている。電力プランは、コントロールパネルの「電源オプション」で見ることができる。しかし、具体的な値を得るには、一般にPowercfg.exeを使うとされている。

 コントロールの電源オプションはGUIなので、見るのは簡単だが、ディスプレイがオフ、あるいはスリープするまでの時間をコンピューターで利用できる形で得ることができない。これに対して、Powercfg.exeは、コマンドとしてはちょっと複雑だが、テキスト出力ができるので、これを使って設定値を得ることが可能だ。このコマンドに関しては以前にも解説したので、詳細はこちらを読んでいただきたい(「Windowsマシンの電源関係を制御する「Powercfg」コマンドを極める」)。

 たとえば、現在の電源プランを得たいなら、

powercfg.exe /GETACTIVESCHEME

というコマンドを使えば、記事冒頭の画面のように電源プラン(のテキスト表現)を得ることができる。ここにある「高パフォーマンス」という電源プラン名を情報として得たければ、PowerShellで、

((powercfg.exe /GETACTIVESCHEME) -split " \(" -split "\)")[1]

とする(以下コマンドラインはPowerShellであるとする)。-splitは引数で指定した文字で左側の文字列を分割する演算子である。電源プラン名に括弧がついたままでよければ、

((powercfg.exe /GETACTIVESCHEME) -split " ")[4]

でもよい。

 MS-DOSの時代から比べると、「ああ、便利な世の中になった」と思うが、こうした仕組みは、Unixのshでいまから何十年も前に実現されていたことでもある。PowerShellはshの「再発明」でしかない点には留意されたい。

Powercfg.exeはどうやって情報を得ている?

 では、Powercfg.exeは、どうやって電源プランの情報を得ているのだろうか? ソースコードが公開されているわけではないので、何か秘密のファイルやレジストリを呼んでいるという可能性もあるが、電源プランの表示に「Query」といったオプションが使われているところを見ると、なんらかのAPIを使って問い合わせしているような感じがしないでもない。

 そういうわけで、Microsoftのドキュメントを検索してみた。するとWMIにそれらしいクラスがある。「Win32_Power」で始まるクラスだ。一覧を得るには、

Get-WmiObject -List -Namespace root\cimv2\power -class "Win32*"

とする。

Win32_Powerで始まるWMIクラスがPowerCfg.exeの/Queryオプションと関係していそうだ

 Get-CimInstanceを使わないでGet-WmiObjectを使うのは、クラス名にワイルドカードが使えないからである。ここにある「Win32_PowerSetting」で始まるクラスが、Powercfg.exeの電源プランと同じような構造を持っている。

Get-WmiObject -List -Namespace root\cimv2\power -class "Win32_PowerSetting*" | Format-Table name,properties

 おそらく、Powercfg.exeは、WMI(CIM)を使って、電源プランについて問い合わせしているようだ。設定値は、「Win32_PowerSettingDataIndex」で得られる。

Get-CimInstance -Namespace root\cimv2\power -class "Win32_PowerSettingDataIndex" | Out-GridView

 ここから、InstanceIDのうち目的の設定値(たとえばディスプレイオフまでの時間など)を抜き出せばよい。

 Powercfg.exeでは、こういう場合、表示されるGUID(のエイリアス)を使い、以下のコマンドで、ディスプレイがオフになる場合の設定値を得られる。

ディスプレイがオフになるまでの時間は、Powercfg.exeでは、「SCHEME_MIN(電源スキーマ)」「SUB_VIDEO(ディスプレイサブグループ)」「VIDEOIDLE(次の時間が経過後ディスプレイの電源を切る)」のGUIDを指定して調べる

powercfg.exe /query SCHEME_MIN SUB_VIDEO VIDEOIDLE

 「query」以降は、電源スキームのGUIDのエイリアスで、実際には、GUIDを指定しているのと同等である。

 WMIの「Win32_PowerSettingDataIndex」もInstanceIDの中に、複数のGUIDが指定してある。ここから、「VIDEOIDLE」に相当するGUID「3c0bc021-c8a8-4e07-a973-6b14cbcb2b7e」を探す。これには、Out-GridViewのフィルター機能を使う。前記GUIDをフィルター欄に入れると、指定した文字列を含む要素だけが表示されるようになる。

Get-CimInstanceの出力を入れたOut-GridViewウィンドウでフィルター欄に文字列を入れると、該当する文字列を持つものだけが表示される

 これを見ると、VIDEOIDLEと同じGUIDである“3c0bc021-c8a8-4e07-a973-6b14cbcb2b7e”を持つInstanceIDは、

Microsoft:PowerSettingDataIndex\{381b4222-f694-41f0-9685-ff5bb260df2e}\AC\{3c0bc021-c8a8-4e07-a973-6b14cbcb2b7e}

のように、

Microsoft:PowerSettingDataIndex\{GUIDスキーマ}\ACまたはDC\{GUID-VIDEOIDLE}

のパターンになっている。おそらくAC、DCは、電源接続時、バッテリ駆動時の区別だろう。

 これからまとめると、現在の電源スキーマがわかれば、あとは設定項目のGUIDを使ってPowercfg.exeで得られる電源プランの設定情報を取得できるわけだ。設定項目のGUIDは、Powercfg.exeでエイリアスを表示させれば、ほとんど得ることができる(ただし、Get-CIMInstanceなどでは、GUIDだけしか指定できない点に注意)。

"Win32_PowerSettingDataIndex"のInstanceID内で指定するGUIDは、PowerCfg.exeのエイリアスオプションで一覧を得ることができる

 また、現在の電源スキーマは、WMIの「Win32_PowerPlan」クラスで調べることができる。

WMIのWin32_PowerPlanを使えば現在の電源プランを得ることができるのだが、Get-CimInstanceで、このクラスにアクセスするには、管理者権限が必要

 残念なことにこのWMIの問い合わせには、管理者権限が必要になる。これはちょっと面倒だ。そこでPowerShellを使ったメリットが出てくる。現在の電源プラン(Powercfg.exeの表現では電源スキーマ)は、以下のコマンドで取得でき、Powercfg.exeの実行には管理者権限は不要(設定を変更しない場合、内部で勝手にやってくれる)だからである。

((powercfg /GETACTIVESCHEME) -split " ")[2]

 PowerShellでは、自身が持つCmdletと外部実行ファイルに区別はないので、このまま変数に代入できる。

$ActivePlanGuid=(powercfg /GETACTIVESCHEME).split(" ")[2];

 というわけで、話が最初に戻った。これらを勘案してディスプレイがオフになるまでの時間は、(リスト01#%VOFF%#)以下のリストで得られる。

$ActivePlanGuid=(powercfg /GETACTIVESCHEME).split(" ")[2];
$VideoIdleGuid="3c0bc021-c8a8-4e07-a973-6b14cbcb2b7e";
(Get-CimInstance -Namespace root\cimv2\power `
  -CLass Win32_PowerSettingDataIndex `
  -Filter "InstanceID like '%${ActivePlanGuid}%AC%${VideoIdleGuid}%'" `
  ).SettingIndexVAlue;


※3行目以降は1行だが、逆クオート(`)で改行をエスケープして分割している点に注意

 なお、ちょっと試してみたが、Get-CIMInstanceの場合、出力をWhere-Objectなどで絞り込むよりも、「-Filter」オプションを使うほうが若干早い。ただし、-Filterオプションで指定するのは、「WQL」と呼ばれる問い合わせ言語である。そんなに難しいものではないのだが、PowerShellの-Like演算子のワイルドカード“*”と違い、WQLのLike演算ワイルドカードは“%”であることに注意されたい(WQLは、SQLをベースにしているためこうなっているのだと思われる)。

 これまで、いろいろとWindowsから情報を引き出す方法を解説したが、どうも大半の情報はWMIで引き出せる感じだ。つまり、WMIにどんなクラスがあるのかを調べていけば、比較的簡単に結果を得られるのではないか? 特に先頭が「Win32」で始まるクラスを調べればいいのではないかという気がしてきた。Windowsの持つ情報が簡単に取り出せないとき、マイクロソフトのドキュメントサイトである

●テクニカル ドキュメント、API、コード サンプル | Microsoft Docs
 https://docs.microsoft.com/ja-jp/

で「WMI Win32 Class」などで検索すれば、何か関連するWMIクラスが見つかるのではないだろうか。あるいは、PowerShellでは、Win32で始まるクラスを以下のコマンドで出力できる。

Get-WMIObject -List -namespace root -class "Win32*" -recurse

 Windowsでは、「困ったときのWMI」ということは言えそうだ。

カテゴリートップへ

この連載の記事

ASCII倶楽部

注目ニュース

  • 角川アスキー総合研究所

プレミアム実機レビュー

ピックアップ
1
Anker PowerLine III Flow USB-C & USB-C ケーブル Anker絡まないケーブル 240W 結束バンド付き USB PD対応 シリコン素材採用 iPhone 17 / 16 / 15 / Galaxy iPad Pro MacBook Pro/Air 各種対応 (1.8m ミッドナイトブラック)
Anker PowerLine III Flow USB-C & USB-C ケーブル Anker絡まないケーブル 240W 結束バンド付き USB PD対応 シリコン素材採用 iPhone 17 / 16 / 15 / Galaxy iPad Pro MacBook Pro/Air 各種対応 (1.8m ミッドナイトブラック)
¥1,390
2
Anker USB Type C ケーブル PowerLine USB-C & USB-A 3.0 ケーブル iPhone 17 / 16 / 15 /Xperia/Galaxy/LG/iPad Pro/MacBook その他 Android 等 USB-C機器対応 テレワーク リモート 在宅勤務 0.9m ホワイト
Anker USB Type C ケーブル PowerLine USB-C & USB-A 3.0 ケーブル iPhone 17 / 16 / 15 /Xperia/Galaxy/LG/iPad Pro/MacBook その他 Android 等 USB-C機器対応 テレワーク リモート 在宅勤務 0.9m ホワイト
¥660
3
CIO フラットスパイラルケーブル CtoC 1m (Type-C/USB-C) PD 急速充電 平型 磁石 マグネット吸着 まとまる 充電ケーブル PD 240W データ転送 480Mbps (ライトブラック, 1m)
CIO フラットスパイラルケーブル CtoC 1m (Type-C/USB-C) PD 急速充電 平型 磁石 マグネット吸着 まとまる 充電ケーブル PD 240W データ転送 480Mbps (ライトブラック, 1m)
¥1,780
4
【Amazon.co.jp限定】 ロジクール 静音 ワイヤレス トラックボール マウス M575SPd Bluetooth Logibolt 無線 windows mac iPad OS Chrome トラックボールマウス ブラック M575 M575SP 国内正規品 ※Amazon.co.jp限定 壁紙ダウンロード付き
【Amazon.co.jp限定】 ロジクール 静音 ワイヤレス トラックボール マウス M575SPd Bluetooth Logibolt 無線 windows mac iPad OS Chrome トラックボールマウス ブラック M575 M575SP 国内正規品 ※Amazon.co.jp限定 壁紙ダウンロード付き
¥5,280
5
エレコム 電源タップ 6個口 3m 雷ガード 個別スイッチ ほこりシャッター付 耐熱 PSE技術基準適合 ブラック T-K6A-2630BK
エレコム 電源タップ 6個口 3m 雷ガード 個別スイッチ ほこりシャッター付 耐熱 PSE技術基準適合 ブラック T-K6A-2630BK
¥1,590
6
Anker iPhone充電ケーブル PowerLine II ライトニングケーブル MFi認証 超高耐久 iPhone 14 / 14 Pro Max / 14 Plus / 13 / 13 Pro / 12 / 11 / X/XS/XR / 8 Plus 各種対応 (0.9m ホワイト)
Anker iPhone充電ケーブル PowerLine II ライトニングケーブル MFi認証 超高耐久 iPhone 14 / 14 Pro Max / 14 Plus / 13 / 13 Pro / 12 / 11 / X/XS/XR / 8 Plus 各種対応 (0.9m ホワイト)
¥990
7
KIOXIA(キオクシア)【日本製】USBフラッシュメモリ 32GB USB2.0 国内サポート正規品 KLU202A032GL
KIOXIA(キオクシア)【日本製】USBフラッシュメモリ 32GB USB2.0 国内サポート正規品 KLU202A032GL
¥980
8
Amazon Kindle - 目に優しい、かさばらない、大きな画面で読みやすい、6週間持続バッテリー、6インチディスプレイ電子書籍リーダー、ブラック、16GB、広告なし
Amazon Kindle - 目に優しい、かさばらない、大きな画面で読みやすい、6週間持続バッテリー、6インチディスプレイ電子書籍リーダー、ブラック、16GB、広告なし
¥13,980
9
UGREEN USB Type Cケーブル PD対応 100W/5A 超急速充電 USB C ナイロン編み 断線防止 iphone17/16/15シリーズ/iPad/MacBook Pro/Galaxy S24/Matebook/iPad/Xperia等USB-C各種対応(1m, ブラック)
UGREEN USB Type Cケーブル PD対応 100W/5A 超急速充電 USB C ナイロン編み 断線防止 iphone17/16/15シリーズ/iPad/MacBook Pro/Galaxy S24/Matebook/iPad/Xperia等USB-C各種対応(1m, ブラック)
¥743
10
Verbatim バーベイタム 1回録画用 ブルーレイディスク BD-R 25GB 50枚+3枚増量パック インクジェットプリンタ対応 ホワイト 片面1層 1-6倍速
Verbatim バーベイタム 1回録画用 ブルーレイディスク BD-R 25GB 50枚+3枚増量パック インクジェットプリンタ対応 ホワイト 片面1層 1-6倍速
¥2,099

Amazonのアソシエイトとして、ASCII.jpは適格販売により収入を得ています。

デジタル用語辞典

ASCII.jpメール デジタルMac/iPodマガジン