Private/Helper/Get-CPUUsage.ps1

<#
Copyright © 2024 Integris. For internal company use only. All rights reserved.
#>


FUNCTION Get-CPUUsage {
    <#
    .SYNOPSIS
    Calculates the average CPU usage over a specified period.
 
    .DESCRIPTION
    This function measures the CPU usage percentage over a given number of seconds and returns the average value.
 
    .PARAMETER Seconds
    The duration in seconds for which the CPU usage is measured. Default is 5 seconds.
 
    .EXAMPLE
    Get-CPUUsage -Seconds 10
 
    .NOTES
    The function uses Get-Counter to retrieve CPU usage data and averages the values over the specified period.
    #>


    param(
        [Parameter()]
        [int]$Seconds = 5
    )


    [int]$Count = 0
    [int]$CPUUsageTotal = 0

    $Now = Get-Date
    
    WHILE ((Get-Date) -le ($Now).AddSeconds($Seconds)) {
        $CPUUsageTotal += (Get-Counter '\Processor(_Total)\% Processor Time').CounterSamples.CookedValue
        $Count++
        Start-Sleep -Milliseconds 250
    }

    return [int]($CPUUsageTotal / $Count)    
}