From 735b3d1a96b25bb0820d4a0eae9b4bd003e087ad Mon Sep 17 00:00:00 2001 From: iminet Date: Wed, 4 Feb 2026 09:37:25 +0100 Subject: [PATCH] First release --- src/ProcessStats.psd1 | 7 ++++++ src/ProcessStats.psm1 | 55 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 src/ProcessStats.psd1 create mode 100644 src/ProcessStats.psm1 diff --git a/src/ProcessStats.psd1 b/src/ProcessStats.psd1 new file mode 100644 index 0000000..cf6ca09 --- /dev/null +++ b/src/ProcessStats.psd1 @@ -0,0 +1,7 @@ +New-ModuleManifest ` + -Path ProcessStats.psd1 ` + -RootModule ProcessStats.psm1 ` + -ModuleVersion 1.0.0 ` + -Author "Iminetsoft" ` + -Description "Analyze memory and CPU usage of duplicate processes" ` + -PowerShellVersion 5.1 diff --git a/src/ProcessStats.psm1 b/src/ProcessStats.psm1 new file mode 100644 index 0000000..1e1ccf4 --- /dev/null +++ b/src/ProcessStats.psm1 @@ -0,0 +1,55 @@ +<# +.SYNOPSIS +PowerShell module to analyze duplicated processes' memory and CPU usage. +#> + +# ----------------------- +# Cmdlet 1: Memory Usage +# ----------------------- +function Get-ProcessMemory { + [CmdletBinding()] + param( + [int]$MinCount = 2 + ) + + Get-Process | + Group-Object Name | + Where-Object Count -ge $MinCount | + ForEach-Object { + [PSCustomObject]@{ + Name = $_.Name + Count = $_.Count + 'Memory Sum in MB' = [math]::Round( + (($_.Group | Measure-Object WorkingSet -Sum).Sum / 1MB), 3 + ) + } + } | + Sort-Object 'Memory Sum in MB' -Descending +} + +# ----------------------- +# Cmdlet 2: CPU Usage +# ----------------------- +function Get-ProcessCPU { + [CmdletBinding()] + param( + [int]$MinCount = 2 + ) + + Get-Process | + Group-Object Name | + Where-Object Count -ge $MinCount | + ForEach-Object { + [PSCustomObject]@{ + Name = $_.Name + Count = $_.Count + 'CPU Total (%)' = [math]::Round( + ($_.Group | Measure-Object CPU -Sum).Sum, 2 + ) + } + } | + Sort-Object 'CPU Total (%)' -Descending +} + +# Export both cmdlets +Export-ModuleMember -Function Get-ProcessMemory, Get-ProcessCPU