Test-IsLaptop extension

Topics: Archive - Toolkit Extensions
Feb 27, 2015 at 8:48 PM
#region Function Test-IsLaptop
Function Test-IsLaptop {
<#
.SYNOPSIS
    Tests whether the local machine HAS a battery.
.DESCRIPTION
    Tests whether the local machine HAS a battery and returns true/false.
.EXAMPLE
    Test-IsLaptop
.NOTES
    This a re-work of PSADT's Test-Battery function
    
    I wanted to use ACLineStatus field in SYSTEM_POWER_STATUS from this:
    https://msdn.microsoft.com/en-us/library/aa373232%28v=vs.85%29.aspx
    
    because [http://stackoverflow.com/questions/4849447/detect-if-application-is-running-on-laptop]
    says:
    ACLineStatus = 0 => The system is not using AC power > Laptop + battery
    ACLineStatus = 1 => The system is using AC power => Laptop + AC
    ACLineStatus = 255 => AC power status is unknown => Desktop

    And maybe later expose SYSTEM_POWER_CAPABILITIES too but I'm a C++ idiot
    
    *********** Use at your own risk ***************
    
    That_annoying_guy
    
.LINK
#>
    [CmdletBinding()]
    Param (
    )   
    Begin {
        # Get the name of this function and write header
        [string]${CmdletName} = $PSCmdlet.MyInvocation.MyCommand.Name
        Write-FunctionHeaderOrFooter -CmdletName ${CmdletName} -CmdletBoundParameters $PSBoundParameters -Header
        
        # PowerStatus class found in this assembly is more reliable than WMI in cases where the battery is failing.
        Add-Type -Assembly System.Windows.Forms -ErrorAction 'SilentlyContinue'
    }
    Process {
        Write-Log -Message 'Check if system HAS a battery...' -Source ${CmdletName}
        
        [System.Windows.Forms.PowerStatus]$PowerStatus = [System.Windows.Forms.SystemInformation]::PowerStatus
        
        ## Get the current battery charge status. Possible values: High, Low, Critical, Charging, NoSystemBattery, Unknown.
        [string]$BatteryChargeStatus = $PowerStatus.BatteryChargeStatus
        
        If (($BatteryChargeStatus -eq 'NoSystemBattery') -or ($BatteryChargeStatus -eq 'Unknown')) {
#           [single]$BatteryLifePercent = 0.0
            Write-Output $false
        } else {
            Write-Output $true
        }
    }
    End {
        Write-FunctionHeaderOrFooter -CmdletName ${CmdletName} -Footer
    }
}
#endregion