Why?

Occasionally it is useful to check the battery health of a laptop, especially when a user reports that it doesn’t hold charge.

This Powershell script outputs both to C:\battery-report.html and directly to the activities feed on NinjaOne. It wraps the raw Generate BatteryHealth Report powercfg command with pass/fail reporting back to NinjaOne.

# ============================================================
function Write-ScriptResult {
    param(
        [string]$ScriptName,
        [ValidateSet('pass','fail','warn')]
        [string]$Status,
        [string]$Message = ""
    )
 
    $entry = [PSCustomObject]@{
        time   = (Get-Date).ToUniversalTime().ToString("o")
        script = $ScriptName
        device = $env:COMPUTERNAME
        status = $Status
        error  = $Message
    } | ConvertTo-Json -Compress
 
    $entry = $entry -replace '"', '\"'
    Ninja-Property-Set scriptLastResult $entry
}
# ============================================================
 
try {
    powercfg /batteryreport /output "C:\battery-report.html"
 
    switch ($LASTEXITCODE) {
        0 {
            Write-ScriptResult -ScriptName "Battery-Report" -Status "pass" -Message "Battery report generated successfully."
        }
        default {
            Write-ScriptResult -ScriptName "Battery-Report" -Status "fail" -Message "powercfg exited with code $LASTEXITCODE."
            exit 1
        }
    }
}
catch {
    Write-ScriptResult -ScriptName "Battery-Report" -Status "fail" -Message $_.Exception.Message
    exit 1
}