Scripts/Get-PCBattery.ps1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
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 {}

}