はじめに
バッテリーは使い続けると徐々に性能が劣化していき、満充電時の最大容量が低下していきます。
ノートPCのバッテリーも例外ではなく、使い続けると徐々に劣化していきます。
Windowsの場合、このようなバッテリーの情報はpowercfg
コマンドで取得できると知ったので、今回はバッテリーの劣化度合いを調べるスクリプトをPowerShellで作ってみました。
作成したスクリプト
-
powercfg
コマンドの実行結果は、デフォルトだとコマンドの結果はHTMLとして返されますが、解析しやすいXML形式で取得しているのがポイントです。 - 基本的に「1つのノートPCに、バッテリーは1つ」と仮定してXMLを解析しています。
- そもそも、バッテリーを複数持つノートPCは存在するのでしょうか?
- バッテリーの劣化度合いは、
(設計時の容量-満充電時の容量) / 設計時の容量 * 100
で計算しています。 - また、
powercfg
コマンドの実行結果を一旦ファイルとして出力しているため、最後に作成したファイルを削除しています。
battery_report.ps1
# ------------------------------------------------------------------------------
# ノートPCのバッテリーの劣化度合いを見るためのスクリプト。
# ------------------------------------------------------------------------------
# powercfgコマンドの実行結果の一時保存先。
$TEMP_FILE = './battery_report.xml'
# powercfgコマンドを実行して、XML形式で実行結果を取得する。
# powercfgコマンド実行時のメッセージが標準出力されないように、パイプでOut-Nullに渡している。
Write-Host 'ノートPCのバッテリーの消耗具合を確認します...'
powercfg /batteryreport /xml /output $TEMP_FILE | Out-Null
# XMLを解析して、設計時の容量(DESIGN CAPACITY)と満充電時の容量(FULL CHARGE CAPACITY)を取得する。
# バッテリーは1つしか存在しないと仮定して、Batteries.FirstChildで取得している。
$battery_xml = [xml](Get-Content $TEMP_FILE)
$design_capacity = $battery_xml.BatteryReport.Batteries.FirstChild.DesignCapacity
$full_charge_capacity = $battery_xml.BatteryReport.Batteries.FirstChild.FullChargeCapacity
$attenuation_rate = ($design_capacity - $full_charge_capacity) / $design_capacity * 100
$attenuation_rate = [Math]::Truncate($attenuation_rate * 10) / 10; # 小数点第一位までに揃える。
# powercfgコマンドの実行結果のファイルを削除する。
Remove-Item -Path $TEMP_FILE
# バッテリーの劣化度合い(%)を出力する。
Write-Host "このPCのバッテリーの最大容量は$attenuation_rate%減少しています。"
Write-Host "設計時の容量(DESIGN CAPACITY):$design_capacity"
Write-Host "満充電時の容量(FULL CHARGE CAPACITY):$full_charge_capacity"
# 処理結果が流れてしまわないように、Pauseを実行する。
cmd /c Pause | Out-Null
出力結果の例
PS C:\Users\NKOJIMA> C:\Users\NKOJIMA\Downloads\battery_report.ps1
ノートPCのバッテリーの消耗具合を確認します...
このPCのバッテリーの最大容量は0%減少しています。
設計時の容量(DESIGN CAPACITY):45010
満充電時の容量(FULL CHARGE CAPACITY):45010