# encoding: ascii
# api: powershell
# title:
# description: this function calculates cpu usage through wmi object
# version: 0.1
# type: function
# license: CC0
# function: cpu-usage
# x-poshcode-id: 565
# x-archived: 2008-09-15T21:29:49
#
#
function cpu-usage
{ if ($Args)
{$machine=$Args}
else
{$machine="localhost"}
#loop to refresh information cpu usage
while($auxiliary -ne 'Q')
{
#first sample of processes
$before = gwmi win32_perfrawdata_perfproc_process -ComputerName $machine
sleep -Milliseconds (100)
#second sample of processes
$after = gwmi win32_perfrawdata_perfproc_process -ComputerName $machine
#hash list with the difference of two samples
$difference = @{}
#array with cpu percentage for each process
$result = @{}
#compare two samples and store difference in $difference["processname"]
foreach ($process_before in $before)
{ foreach ($process_after in $after)
{ if ($process_after.name -eq $process_before.name)
{$difference_process = [long]$process_after.percentprocessortime -[long]$process_before.percentprocessortime
$difference[$process_before.name] = $difference_process
}
}
}
#total cpu time
$sum = $difference["_Total"]
#with all processes, we calculate percentaje
foreach ($i in $difference.keys)
{$result[$i] = ((($difference.$i)/$sum)*100)
}
#sort array descending
$result= (($result.GetEnumerator() | sort value -Descending)[1..10])
Clear-Host
Write-Host ""
Write-Host "press Q to quit, another key to refresh"
format-table -AutoSize -InputObject $result @{Label= "Name:"; Expression = {$_.name}},`
@{Label = "percentaje CPU"; Expression= {"{0:n2}" -f ($_.Value)}}
$auxiliary = $Host.UI.RawUI.ReadKey()
$auxiliary = [string]$auxiliary.character
$auxiliary=$auxiliary.toupper()
}
}