public/Get-ProcessList.ps1

function Get-ProcessList {
    <#
    .SYNOPSIS
        Get-ProcessList retrieves a list of processes
    .DESCRIPTION
        Get-ProcessList retrieves a list of processes and sorts them by CPU usage in descending order
    .PARAMETER Top
        Top number of processes to display. Default is 10
    .PARAMETER Detailed
        Retrieves detailed information about processes. If specified, you can also filter by ProcessName or PortNumber
    .PARAMETER ProcessName
        Name of the process to filter by when Detailed is specified
    .PARAMETER PortNumber
        Port number to filter processes by when Detailed is specified
    .EXAMPLE
        Get-ProcessList

        Get-ProcessList retrieves a list of processes and sorts them by CPU usage in descending order
    .EXAMPLE
        Get-ProcessList -Top 5

        Get-ProcessList retrieves a list of the top 5 processes sorted by CPU usage in descending order
    .EXAMPLE
        Get-ProcessList -Detailed

        Get-ProcessList retrieves detailed information about all processes
    .EXAMPLE
        Get-ProcessList -Detailed -ProcessName 'nginx'

        Get-ProcessList retrieves detailed information about the 'nginx' process
    .EXAMPLE
        Get-ProcessList -Detailed -PortNumber 443

        Get-ProcessList retrieves detailed information about processes using port 443
    .LINK
        https://github.com/Skatterbrainz/linuxtools/blob/master/docs/Get-ProcessList.md
    #>

    [CmdletBinding()]
    param (
        [parameter(Mandatory=$False)][int]$Top = 10,
        [parameter(Mandatory=$False, ParameterSetName='Detailed')][switch]$Detailed,
        [parameter(Mandatory=$False, ParameterSetName='Detailed')][string]$ProcessName,
        [parameter(Mandatory=$False, ParameterSetName='Detailed')][int]$PortNumber
    )
    if ($Detailed.IsPresent) {
        if ($PortNumber -gt 0) {
            Invoke-Command -ScriptBlock { lsof -i :$PortNumber }
        } elseif (![string]::IsNullOrEmpty($ProcessName)) {
            Invoke-Command -ScriptBlock { lsof -c $ProcessName }
            Write-Host "Detailed process information for port $PortNumber"
        } else {
            Write-Host "Detailed process information for all processes"
            Invoke-Command -ScriptBlock { lsof }
        }
    } else {
        Get-Process | Sort-Object CPU -Descending |
            Select-Object -First $Top -Property ID,Handles,WorkingSet,@{l='CPU';e={'{0:N}' -f $_.CPU}},ProcessName
    }
}