Windows PCに限りませんが、ノートPCはしばらく使うとバッテリーがどの程度消耗してしまったのかを知りたくなります。利用の仕方にもよりますがHDD搭載型PCの場合、1年も使うとバッテリー寿命が気になってきます。
バッテリー自体に寿命がわかるLEDインジケーターが付いているDELLのノートPCのような例もありますが、多くのノートPCの場合、体感的に寿命を感じ取るか、ユーティリティソフトを使って寿命までの時間を知ることになります。個人PCの場合はこれでもいいのですけど、組織のシステム管理者をやっていると、翌年のPCメンテナンス予算にスペアバッテリーコストを組み込む必要があったりして、体感ではなく具体的なバッテリー消耗度を把握したくなります。
プログラムによる Windows ノートPC のバッテリー消耗度を知る方法はないかと、検索エンジンで検索してみたところ、いろいろ情報が出て来ました。
http://www.atmarkit.co.jp/ait/articles/1410/10/news058.html
Windows8 以降の場合
上記URLの情報によると、C:\Windows\system32 の下に powercfg.exe というコマンドがあるとのこと。本当は、PowerShell の中のコマンドだったらもっと良かったんですけど、exe コマンドでもこの際我慢しましょう。
C:\windows\system32 の下に移動して、管理者の権限で
powercfg /batteryreport
と実行すれば、コマンドを発行したフォルダーの下に、battery-report.html が作成され、その中にバッテリー消耗度に関する情報が保存されるとのこと。
記事のまま C:\Windows\system32 の下で実行すると、作成されたファイルを消すのが面倒になるので、C:\temp の下で実行することにします。
\windows\system32\powercfg /batteryreport
作成されたファイルの一部がこれ。
この中の、DESIGN CAPACITY と FULL CHARGE CAPACITY 情報がバッテリー消耗度を判定する数値になります。
Installed batteries
BATTERY 1 | |
NAME | PA381 |
MANUFACTURER | – |
SERIAL NUMBER | 1288 |
CHEMISTRY | Li-i |
DESIGN CAPACITY | 48,600 mWh |
FULL CHARGE CAPACITY | 44,301 mWh |
CYCLE COUNT | – |
この数値は、私が使っている東芝Dynabook Windows10 home のものですが、バッテリーはスペアバッテリーをAmazonで購入した時の記事にあるものです。
設計容量は 48,600mWh ですが、現在の満充電可能な容量は 44,301mWh だそうです。計算すると新品の時と比べての約90%の性能に劣化しているということのようです。
レポート全体は、battery-report.html リンクをどうぞ。
Windows7 の場合
残念なことに、このコマンドは Windows8 以降のWindowsに装備されているコマンドということで、Windows7 ノートでは、powercfg.exe コマンドは存在するものの、/batteryreport オプションがありません。
powercfg /? でコマンドオプションを観察してみると -ENERGY というオプションが見つかりました。これ使えそう。
同様に、C:\temp にて、
\windows\system32\powercfg -energy -output energy-report.html -duration 5
と実行したところ、以下のように表示のされ方が少し違って単位が非表示になっていますが、必要な情報が含まれたレポートが出来上がりました。
バッテリ:バッテリ情報
バッテリ ID | 1288PA381 |
製造元 | |
シリアル番号 | 1288 |
種類 | Li-i |
長期 | 1 |
シールド | 0 |
容量の設計 | 48600 |
前回の完全充電 | 44301 |
全部の情報が含まれたレポートはこちら。energy-report
-output は保存するファイル名を指定、-duration はシステムを監視する時間をデフォルトの60秒から5秒に短縮するために付けています。もし、生成されたレポートを目視で判断するのではなく、プログラムで処理するなら、-xml オプションを付ける方がいいかもしれません。
ということで、ターゲットのPC上で操作すれば、バッテリー消耗度を確認できることがわかりました。
リモートPCのバッテリー消耗度を知る
このコマンドをリモートから実行できて、出力ファイルを手元にリモートコピーできれば、組織でIT業務を担当している人には都合がよいと言えます。
Powershell 内蔵コマンドなら、今までに作ったリモートコマンドがあるので標準で応用できるんですが、DOSコマンドなので無理。この場合は、PsExec を使って、実行する必要があります。リモート実行出来る権限があるなら、ターゲットの c$ をマウントできるはずなので、ターゲットPCローカルに保存したファイルをリモートコピーするのも可能でしょう。
PsExecコマンドをダウロードしたら、system32 のようにパスが通ったフォルダーにコピーしておくこと。
どのPCへの自由にアクセスできる管理権限を持つ管理者なら、次のようにしてリモート ノートPCのバッテリ情報が含まれるファイルを作成することが出来ます。
PsExec \\remote_pcname powercfg -ENERGY -DURATION 1 -OUTPUT C:\TEMP\pcname.html
太字の powercfg 以降がローカルに実行するコマンド。
PsExec に続いて、リモートコマンドを発行したいPC名を \\xxxxx と指定すれば、OK。ただし、-OUTPUTオプションで指定するパスはリモートPCのパスなので、コマンド実行後、自分のPCに持ってこなくちゃいけません。
それには、move コマンドで移動してしまえば、リモートPCユーザーに知られることもありません。こんな感じ。
MOVE \\remote_pcname\c$\temp\pcname.html .\pcname.html
この二行をループに入れて、調べたいPC分だけぶんまわせば、あとは待っているだけでノートPCのバッテリー情報が集まるという訳です。
<powercfg_loop.bat>
For /F %%A in ('type pc_list.txt') do ( PsExec \\%%A powercfg -ENERGY -DURATION 1 -OUTPUT C:\TEMP\energy.html MOVE /y \\%%A\c$\temp\energy.html .\reports\"%%A".html )
<pc_list.txt> このファイルには、調査したいPC名を一行ずつ記述しておきます。
PC1 PC2 PC3 ..... ..... PC99
powercfg_loop.bat は恐らく動くとは思いますが、実際に試していません。個人的には複数のWindows7 以上のノートPCを持っていませんからね。
またエラー処理もしていませんから、ネットワークにつながっていないPCやスリープ状態のPCが指定されていると、エラーで終わるかもしれません。運用に使うなら、コマンド発行前に、ping してネットワークに接続できていることを確認し、コマンド実行結果のOK,NGを判定して、ファイルに記録するなどの工夫が必要でしょう。
こういうやり方を行うことが出来るのは、IT部門を持つ、統一されたOS環境、設定、ドメインによるアカウント管理を行っている組織の場合で、好き勝手な設定で運用されているPC環境では逆に苦労が増えるだけになりそうです。そもそも前提条件が、会社配布のノートPCのバッテリー寿命を調べて予算化しましょうということなので、そういう必要性がない環境ではこういう調査を行う必要がないわけです。
ちなみに取り込んだファイルは HTML形式なので、バッテリー消耗度を把握するにはいちいちファイルを開いて必要な場所を読み取らないといけません。XML形式で出力すれば、必要な情報をプログラムで取り出すのが少しは楽になるかも知れません。そのためには、xml 形式で取り出してコピーするようにコマンドラインをちょっと修正します。こんな感じ。
PsExec \\%%A powercfg -ENERGY -DURATION 1 -XML -OUTPUT C:\TEMP\energy.xml MOVE /y \\%%A\c$\temp\energy.xml .\reports\"%%A".xml
繰り返しになりますが、ドメインに参加しているPCに対する管理者権限があるユーザーでDOS窓を開き、その中で上記のコマンドを実行する必要があります。アカウント管理を行っていないのであれば、Adminユーザーとそのパスワードを、コマンド入力時個々に与えるようにスクリプトを修正する必要があります。
面倒なら、バッチファイルメールを社内Webに公開して、ユーザーに個々のPC上で実行してもらい、結果のファイルをメールの添付ファイルで送ってもらえばよっぽど楽じゃない?