41 lines
2.1 KiB
PowerShell
41 lines
2.1 KiB
PowerShell
|
|
function Get-ProcessPerformance {
|
||
|
|
param (
|
||
|
|
$ProcessName
|
||
|
|
)
|
||
|
|
if ($null -eq $ProcessName) {
|
||
|
|
$GetProcess = Get-Process -ErrorAction Ignore | Where-Object ProcessName -ne Idle
|
||
|
|
}
|
||
|
|
else {
|
||
|
|
$GetProcess = Get-Process -Name $ProcessName -ErrorAction Ignore
|
||
|
|
}
|
||
|
|
if ($null -ne $GetProcess) {
|
||
|
|
$ProcessPerformance = Get-CimInstance Win32_PerfFormattedData_PerfProc_Process
|
||
|
|
$Collections = New-Object System.Collections.Generic.List[System.Object]
|
||
|
|
foreach ($Process in $GetProcess) {
|
||
|
|
$ProcPerf = $ProcessPerformance | Where-Object IDProcess -eq $Process.Id
|
||
|
|
$Collections.Add([PSCustomObject]@{
|
||
|
|
Name = $Process.Name
|
||
|
|
ProcTime = "$($ProcPerf.PercentProcessorTime) %"
|
||
|
|
IOps = $ProcPerf.IODataOperationsPersec
|
||
|
|
IObsRead = $($ProcPerf.IOReadBytesPersec / 1mb).ToString("0.00 Mb")
|
||
|
|
IObsWrite = $($ProcPerf.IOWriteBytesPersec / 1mb).ToString("0.00 Mb")
|
||
|
|
RunTime = if ($null -ne $Process.StartTime) {
|
||
|
|
$([string]([datetime](Get-Date) - $Process.StartTime) -replace "\.\d+$")
|
||
|
|
}
|
||
|
|
TotalTime = $Process.TotalProcessorTime -replace "\.\d+$"
|
||
|
|
UserTime = $Process.UserProcessorTime -replace "\.\d+$"
|
||
|
|
PrivTime = $Process.PrivilegedProcessorTime -replace "\.\d+$"
|
||
|
|
WorkingSet = $($Process.WorkingSet / 1mb).ToString("0.00 Mb")
|
||
|
|
PeakWorkingSet = $($Process.PeakWorkingSet / 1mb).ToString("0.00 Mb")
|
||
|
|
PageMemory = $($Process.PagedMemorySize / 1mb).ToString("0.00 Mb")
|
||
|
|
Threads = $Process.Threads.Count
|
||
|
|
Handles = $Process.Handles
|
||
|
|
#Path = $Process.Path
|
||
|
|
#Company = $Process.Company
|
||
|
|
#FileVersion = $Process.FileVersion
|
||
|
|
#CommandLine = $Process.CommandLine
|
||
|
|
})
|
||
|
|
}
|
||
|
|
$Collections | Sort-Object -Descending ProcTime,IOps,TotalTime
|
||
|
|
}
|
||
|
|
}
|