PowerShellからWinRTを直接呼ぶ ― PowerManagerでWindowsの電源状態を観察する

PowerShellカテゴリを表すパンダのイラスト PowerShell

この記事について
この記事は、生成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なら、RemainingChargePercentBatteryStatusPowerSupplyStatus が観察しやすい値です。デスクトップ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アダプターの接続状態だけを変えて再実行します。BatteryStatusPowerSupplyStatus がどう変わるかを見ます。

ここで「必ずこの値になる」と決め打ちしないことがポイントです。ハードウェアやドライバー、電源状態によって結果は異なります。

なぜ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・状態・表示のつながりを追いやすくなります。

文書情報

記事タイトル
PowerShellからWinRTを直接呼ぶ ― PowerManagerでWindowsの電源状態を観察する
作成日
更新日
Source URL
https://papanda925.com/?p=15329

ライセンス: 本記事のうち、当サイトが権利を有する本文・自作図表は、特記なき限り CC BY 4.0 で利用できます。生成AIを活用して作成・編集した内容を含みます。コードについて、別途ライセンス表示またはリンク先GitHubリポジトリのライセンスがある場合は、その条件を優先します。引用・第三者資料・画像・商標等は本ライセンスの対象外です。 利用ポリシー

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