この記事について
この記事は、生成AIを活用した自動生成フローで作成しています。Windows Runtime の PowerManager 公式APIと既存Daily-Code-Samplesを再確認し、PowerShellから電源状態を読み取る最小Smoke Testとして整理しています。
検証ステータス:📘 公式情報確認済み・Windows実機未確認
PowerShellからWinRTを直接呼ぶと、Windowsの電源状態を「コマンドレットではなくOS APIから読む」体験ができます。今回の成功条件は、[SUCCESS] とともに RemainingChargePercent などの値が1つ以上表示されることです。
まず動かす
対象は Windows PowerShell 5.1 + Windows 10/11 です。値を読むだけなので、管理者権限は不要です。
$pm = [Windows.System.Power.PowerManager, Windows.System.Power, ContentType = WindowsRuntime]
Write-Host '[START] PowerManager を読みます'
try {
$result = [pscustomobject]@{
RemainingChargePercent = $pm::RemainingChargePercent
BatteryStatus = [string]$pm::BatteryStatus
PowerSupplyStatus = [string]$pm::PowerSupplyStatus
EnergySaverStatus = [string]$pm::EnergySaverStatus
}
Write-Host '[SUCCESS] PowerManager を読み取れました'
$result | Format-List
}
catch {
Write-Host '[FAILED] PowerManager の読み取りに失敗しました'
Write-Host ("Type : {0}" -f $_.Exception.GetType().FullName)
Write-Host ("Message : {0}" -f $_.Exception.Message)
}
PowerManagerが公開するプロパティはMicrosoft Learnで確認できます。
ここを見る
ノートPCなら、RemainingChargePercent、BatteryStatus、PowerSupplyStatus が観察しやすい値です。デスクトップPCなどバッテリーを持たない環境では、ノートPCと同じ値になるとは限りません。
重要なのは値そのものより、PowerShellが次の層を通っている点です。
flowchart LR
PS[Windows PowerShell 5.1] --> RT[WinRT 型解決]
RT --> PM[Windows.System.Power.PowerManager]
PM --> OS[Windows の電源状態]
OS --> PM --> PS
ContentType = WindowsRuntime は「この型をWindows Runtimeの型として解決する」ための指定です。普通のPowerShellコマンドレットを呼んでいるのではありません。
1か所変えてみる
ノートPCで安全に試せるなら、コードは変えず ACアダプターの接続状態だけを変えて再実行します。BatteryStatus や PowerSupplyStatus がどう変わるかを見ます。
ここで「必ずこの値になる」と決め打ちしないことがポイントです。ハードウェアやドライバー、電源状態によって結果は異なります。
なぜWinRTをPowerShellから触るのか
WinRTはWindowsがアプリ向けに公開しているAPI群の1つです。PowerShellから直接型を解決できるAPIなら、「Windowsの設定や状態が、GUIの奥でどんなAPIとして公開されているか」を小さく観察できます。
Win32 APIをVBAからDeclareして呼ぶ場合とは入口が異なりますが、「OSが公開するAPIを別の言語から利用する」という考え方は共通です。
仕事で使うなら
この最小例をそのまま監視システムにするのではなく、次を足します。
PowerShell/Windowsバージョンを記録する
バッテリー非搭載PCを想定する
取得失敗を成功扱いしない
ログへ必要以上の端末情報を出さない
PowerShell 7で同じコードが動くと決めつけない
今回はSmoke Testなので、まずAPIを1回呼び、値が取れるかだけを明確にしています。
GitHubサンプル
再利用版は成功/失敗表示と追加プロパティを含みます。
公式情報・一次情報
まとめ
PowerShellからWinRTを呼ぶと、Windowsの電源状態をOS APIの入口から観察できます。最初は「値が1つ取れたら成功」に絞り、次にAC接続状態など1条件だけ変えると、API・状態・表示のつながりを追いやすくなります。
