Scripts/Get-PCBattery.ps1

Function Get-PCBattery {

    <#
 
    .SYNOPSIS
    Get battery information
 
    .DESCRIPTION
    Get battery information
 
    .PARAMETER ComputerName
    The target computer name
 
    .EXAMPLE
    Get-PCBattery -ComputerName LabPC2024
 
    .NOTES
    N/A
 
    .LINK
    N/A
 
    #>


    [CmdletBinding ()]

    Param (

        [Parameter (Mandatory = $True,
                    ValueFromPipeline = $True,
                    ValueFromPipelineByPropertyName = $True,
                    HelpMessage = 'Enter computer name'
                   )
        ]

        [String[]]$ComputerName

    )

    BEGIN {

        $BatteryStatus = @{

            '1' = 'Battery power'
            '2' = 'AC power'
            '3' = 'Fully charged'
            '4' = 'Low'
            '5' = 'Critical'
            '6' = 'Charging'
            '7' = 'Charging and high'
            '8' = 'Charging and low'
            '9' = 'Charging and critical'
            '10' = 'Undefined'
            '11' = 'Partially charged'

        }

        $BatteryChemistry = @{

            '1' = 'Other '
            '2' = 'Unknown'
            '3' = 'Lead acid'
            '4' = 'Nickel cadmium'
            '5' = 'Nickel metal hydride'
            '6' = 'Lithium-ion'
            '7' = 'Zinc air'
            '8' = 'Lithium polymer'

        }

        Function Show-Output ($Computer, $Values, $Status) {

            [PSCustomObject]@{

                ComputerName = $Computer
                Caption = $Values.Caption
                Description = $Values.Description
                Name = $Values.Name
                BatteryStatus = $BatteryStatus["$($Values.BatteryStatus)"]
                Chemistry = $BatteryChemistry["$($Values.Chemistry)"]
                DesignVoltageMilliVolts = $Values.DesignVoltage
                DeviceID = $Values.DeviceID
                EstimatedChargeRemainingPercentage = $Values.EstimatedChargeRemaining
                EstimatedRunTimeMinutes = $Values.EstimatedRunTime
                TimeOnBattery = $Values.TimeOnBattery
                TimeToFullCharge = $Values.TimeToFullCharge
                Status = $Status

            }

        }

    }

    PROCESS {

        ForEach ($Computer In $ComputerName) {

            If (Test-Connection -ComputerName $Computer -Count 1 -Quiet) {

                Try {

                    $Data = Get-WmiObject Win32_Battery -ComputerName $Computer | Select-Object *

                    ForEach ($Item In $Data) {

                        Show-Output $Computer.ToUpper() $Item 'Ok'

                    }

                }

                Catch {

                    Show-Output $Computer.ToUpper() $Null $PSItem.Exception.Message

                }

            }

            Else {

                Show-Output $Computer.ToUpper() $Null 'Unreachable'

            }

        }

    }

    END {}

}