Public/Get-ProcessInfo.ps1

function Get-ProcessInfo {
    <#
    .SYNOPSIS
        Returns process summary information as a PSCustomObject.
    .DESCRIPTION
        Collects total process count and top 5 processes by CPU usage.
        Works cross-platform. Pipe to ConvertTo-Json for JSON output.
    .EXAMPLE
        Get-ProcessInfo
        Get-ProcessInfo | ConvertTo-Json -Depth 3
    #>

    [CmdletBinding()]
    [OutputType([PSCustomObject])]
    param(
        [int]$TopN = 5
    )

    $processes = Get-Process -ErrorAction SilentlyContinue
    $total = @($processes).Count

    $topByCpu = @($processes |
        Sort-Object CPU -Descending |
        Select-Object -First $TopN |
        ForEach-Object {
            [PSCustomObject]@{
                Name      = $_.ProcessName
                Id        = $_.Id
                CpuSeconds = [math]::Round($_.CPU, 2)
                MemoryMB  = [math]::Round($_.WorkingSet64 / 1MB, 2)
            }
        })

    $topByMem = @($processes |
        Sort-Object WorkingSet64 -Descending |
        Select-Object -First $TopN |
        ForEach-Object {
            [PSCustomObject]@{
                Name      = $_.ProcessName
                Id        = $_.Id
                CpuSeconds = [math]::Round($_.CPU, 2)
                MemoryMB  = [math]::Round($_.WorkingSet64 / 1MB, 2)
            }
        })

    [PSCustomObject]@{
        TotalCount  = $total
        TopByCpu    = $topByCpu
        TopByMemory = $topByMem
    }
}