Update 01.08.2017
I have updated the script to ensure that the Windows.Devices.Power.Battery class is properly loaded, as this wasn’t the case in a PowerShell 64 bit session.
A little script i wrote to retrieve the Battery Charge status. The script makes use of the BatteryReport class that agregates the information should the device have more than one battery like the Surface Book.
function Get-BatteryChargeStatus
{
<#
.Synopsis
Get-BatteryChargeStatus
.DESCRIPTION
Get-BatteryChargeStatus shows the Battery Charging status,
the remaining Battery capacity in percent and if the system
is running on Battery.
The Battery Status can have one of the following values:
Charging, Discharging, Idle or NotPresent
.PARAMETER Detail
Displays additional Battery Information
.EXAMPLE
Get-BatteryChargeStatus
Status Utilization PowerOnline
------ ----------- -----------
Charging 99 True
.EXAMPLE
Get-BatteryChargeStatus -Detail
ChargeRateInMilliwatts : 3052
DesignCapacityInMilliwattHours : 68902
FullChargeCapacityInMilliwattHours : 70222
RemainingCapacityInMilliwattHours : 69689
Status : Charging
Utilization : 99
PowerOnline : True
.NOTES
30/07/2017, Initial version, Alex Verboon
01/08/2017, added class init to check that Windows.Device class is available.
For more information see:
https://docs.microsoft.com/en-us/uwp/api/windows.devices.power.batteryreport
#>
[CmdletBinding()]
Param
(
[switch]$Detail
)
Begin
{
Try{
# First ensure Windows.Devices class is available
$BattAssembly = [Windows.Devices.Power.Battery,Windows.Devices.Power.Battery,ContentType=WindowsRuntime]
#[Windows.Devices.Power.Battery].Assembly
}
Catch
{
Write-Error "Unable to load the Windows.Devices.Power.Battery class"
}
Try{
$Report = [Windows.Devices.Power.Battery]::AggregateBattery.GetReport()
}
Catch{
Write-Error "Unable to retrieve Battery Report information"
Break
}
If ($Report.Status -ne "NotPresent")
{
$pbmax = [convert]::ToDouble($Report.FullChargeCapacityInMilliwattHours)
$pbvalue = [convert]::ToDouble($Report.RemainingCapacityInMilliwattHours)
$Utilization = [int][math]::Round( (($pbvalue / $pbmax) *100))
$PowerOnlineStatus = (Get-CimInstance -ClassName batterystatus -Namespace root/WMI).PowerOnline
# Check if at least one battery reports running on power
If ($PowerOnlineStatus -contains "True")
{
$PowerOnline = $true
}
Else
{
$PowerOnline = $false
}
}
Else
{
[int]$Utilization = 0
$PowerOnline = ""
}
}
Process
{
If ($Detail -eq $true)
{
$Properties = [ordered] @{
ChargeRateInMilliwatts = $Report.ChargeRateInMilliwatts
DesignCapacityInMilliwattHours = $report.DesignCapacityInMilliwattHours
FullChargeCapacityInMilliwattHours = $Report.FullChargeCapacityInMilliwattHours
RemainingCapacityInMilliwattHours = $Report.RemainingCapacityInMilliwattHours
Status = $Report.Status
Utilization = $Utilization
PowerOnline = $PowerOnline
}
$BatteryChargeStatus = (New-Object -TypeName PSObject -Property $Properties)
}
Elseif ($Detail -eq $false)
{
$Properties = [ordered] @{
Status = $Report.Status
Utilization = $Utilization
PowerOnline = $PowerOnline
}
$BatteryChargeStatus = (New-Object -TypeName PSObject -Property $Properties)
}
}
End
{
$BatteryChargeStatus
}
}
I ran this script without error, but also without any output. Where should I expect to view the output?
first run the script to load the function, then run the function itself
This is missing: Get-ExecutionPolicy -List and Set-ExecutionPolicy -ExecutionPolicy RemoteSigned