Status baterii w PowerShell – zaawansowany przewodnik ekspercki
Status baterii w PowerShell – zaawansowany przewodnik ekspercki
Monitorowanie stanu baterii w systemie Windows jest niezwykle istotne nie tylko dla użytkowników laptopów, ale również dla administratorów systemów, twórców skryptów zarządzających energią czy deweloperów tworzących aplikacje na urządzenia mobilne i embedded. PowerShell – jako potężna powłoka skryptowa i język automatyzacji – oferuje szerokie możliwości odczytu i analizy informacji o stanie baterii. W tym artykule przedstawiamy najbardziej wyczerpujące, eksperckie podejście do wykorzystania PowerShell w celu monitorowania statusu zasilania, diagnostyki oraz automatyzacji reakcji na zdarzenia energetyczne.
1. Wprowadzenie do statusu baterii w Windows przez PowerShell
System Windows przechowuje informacje o stanie baterii i zasilaniu w WMI (Windows Management Instrumentation) – zbiorze interfejsów udostępniających dane o sprzęcie i systemie operacyjnym. PowerShell pozwala bezpośrednio odczytywać te dane z klasy Win32_Battery
, BatteryStatus
, BatteryStaticData
, BatteryFullChargedCapacity
, BatteryStatus
, BatteryEstimatedTime
, BatteryChargeStatus
i innych powiązanych klas w przestrzeni nazw root\CIMV2
oraz root\WMI
.
2. Podstawowy odczyt statusu baterii z Win32_Battery
Get-WmiObject -Class Win32_Battery
Przykładowe właściwości:
- BatteryStatus – aktualny status (np. ładowanie, rozładowywanie),
- EstimatedChargeRemaining – procent pozostałej baterii,
- EstimatedRunTime – szacowany czas do rozładowania (w minutach),
- TimeOnBattery – czas pracy na baterii,
- DesignCapacity / FullChargeCapacity (dostępne w WMI lub z
powercfg
), - Chemistry – typ baterii (Li-Ion, NiMH),
- Voltage, Amperage, ChargeRate – szczegóły parametrów elektrycznych.

3. Zaawansowane metody diagnostyczne
3.1. Klasy z przestrzeni root\WMI
Get-WmiObject -Namespace "root\WMI" -Class BatteryStatus
W niektórych systemach warto użyć:
Get-WmiObject -Namespace "root\WMI" -Query "SELECT * FROM BatteryStatus"
lub:
Get-CimInstance -Namespace "root\WMI" -ClassName BatteryStatus
3.2. Ładowanie, czas pracy i napięcie:
Get-CimInstance -ClassName BatteryStatus -Namespace root\wmi | Select-Object Voltage, RemainingCapacity, ChargeRate, PowerOnline
4. Generowanie raportu energetycznego powercfg
z PowerShell
powercfg /batteryreport /output "C:\battery-report.html"
Start-Process "C:\battery-report.html"
Raport HTML zawiera:
- historię ładowania i rozładowania,
- zużycie energii,
- spadek pojemności w czasie (wear level),
- dane diagnostyczne AC/DC, hibernacji i wiele więcej.
5. Własny skrypt diagnostyczny PowerShell
$Battery = Get-WmiObject Win32_Battery
$status = switch ($Battery.BatteryStatus) {
1 {"Rozładowywanie"}
2 {"Ładowanie"}
3 {"Pełna"}
4 {"Low"}
5 {"Critical"}
6 {"Charging and High"}
7 {"Charging and Low"}
8 {"Charging and Critical"}
9 {"Undefined"}
10 {"Partially Charged"}
default {"Nieznany"}
}
Write-Host "Status baterii: $status"
Write-Host "Pozostało: $($Battery.EstimatedChargeRemaining)%"
Write-Host "Szacowany czas: $($Battery.EstimatedRunTime) minut"
6. Automatyzacja reakcji: np. wysyłanie powiadomień
Skrypt wykrywający niski poziom baterii i wysyłający powiadomienie:
Add-Type -AssemblyName System.Windows.Forms
$Battery = Get-WmiObject Win32_Battery
if ($Battery.EstimatedChargeRemaining -lt 20 -and $Battery.BatteryStatus -eq 1) {
[System.Windows.Forms.MessageBox]::Show("Bateria poniżej 20%! Podłącz zasilacz.", "Ostrzeżenie", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Warning)
}
7. Tworzenie wykresu zużycia baterii – z logów battery-report.html
Można parsować wygenerowany raport HTML i przekształcić dane w plik CSV lub JSON, a następnie użyć np. Out-Chart
, Import-Csv
czy narzędzi Power BI do wizualizacji zmian w czasie.
8. Integracja z zewnętrznymi narzędziami i API
- Możliwość zintegrowania odczytu statusu z Teams, Slack, Telegram (np. przez Webhook),
- Automatyczne raportowanie na e-mail (SMTP),
- Użycie
Scheduled Task
lubTask Scheduler
do okresowych odczytów i archiwizacji.
9. Odczyt danych z wielu urządzeń w sieci (zdalnie)
Invoke-Command -ComputerName "LaptopUser1" -ScriptBlock {
Get-WmiObject -Class Win32_Battery
}
Umożliwia centralne monitorowanie stanu baterii w firmie (np. na laptopach pracowników).
10. Inne klasy powiązane z zasilaniem
Win32_PowerManagementEvent
– reagowanie na zdarzenia związane z energią (hibernacja, stan czuwania),Win32_PortableBattery
– dodatkowe informacje o rodzaju i lokalizacji baterii,MSAcpi_ThermalZoneTemperature
– temperatura systemu i jej wpływ na żywotność baterii.
11. Porady praktyczne i bezpieczeństwo
- Sprawdzaj baterię regularnie pod kątem spadku pojemności – szczególnie w laptopach używanych mobilnie,
- PowerShell umożliwia logowanie i analizę danych – świetne dla zarządzania flotą urządzeń,
- Możliwość integracji z BIOS / firmware (np. przez HP WMI BIOS Extension) dla uzyskania jeszcze głębszych informacji.
12. Diagnostyka błędów i ich obsługa
Przykładowe błędy:
- Brak klasy
Win32_Battery
– występuje przy desktopach lub źle zainstalowanych sterownikach, EstimatedRunTime = -1
– oznacza błąd odczytu / brak danych z BIOSu / zbyt nowa technologia nieobsługiwana przez WMI.
Podsumowanie
PowerShell to potężne narzędzie do monitorowania, automatyzacji i analizy stanu baterii w systemie Windows. Dzięki klasom WMI, skryptom automatyzującym oraz integracji z powercfg
można uzyskać pełny wgląd w parametry zasilania, prowadzić zaawansowaną diagnostykę i reagować na krytyczne zdarzenia.