Bom dia, Pessoal
Sou nova na criação de scprits, tive esse mesmo problema e consegui resolver com a ajuda de dois colegas de trabalho. Os códigos que postarei, verificam os 15 maiores processos e mostram em porcentagem.
Espero que ajude de alguma forma.
#CPU
write-host "Mostra processos de CPU em porcentagem"
$Result = Get-Counter "\Process(*)\% Processor Time" -ErrorAction SilentlyContinue `
| Select-Object -ExpandProperty CounterSamples `
| Where-Object {$_.Status -eq 0 -and $_.instancename -notin "_total", "idle", "" -and $_.CookedValue/$env:NUMBER_OF_PROCESSORS -gt 0} `
| Sort-Object CookedValue -Descending `
| Select-Object @{N="ServerName";E={$env:COMPUTERNAME}},
@{N="ProcessName";E={
$friendlyName = $_.InstanceName
try {
$procId = [System.Diagnostics.Process]::GetProcessesByName($_.InstanceName)[0].Id
$proc = Get-WmiObject -Query "SELECT ProcessId, ExecutablePath FROM Win32_Process WHERE ProcessId =$procId"
$procPath = ($proc | where { $_.ExecutablePath } | select -First 1).ExecutablePath
$friendlyName = [System.Diagnostics.FileVersionInfo]::GetVersionInfo($procPath).FileDescription
} catch { }
$friendlyName
}},
@{N="CPU_Percent";E={[System.Math]::Round(($_.CookedValue/$env:NUMBER_OF_PROCESSORS), 2)}},
@{N="TimeStamp";E={Get-Date -Format 'dd/MM/yyyy HH:mm:ss.fff'}} -First 15
$Result
#memória
write-host "Mostra processos de memória em porcentagem"
$RAM=Get-WMIObject Win32_PhysicalMemory | Measure -Property capacity -Sum | %{$_.sum}
Get-WmiObject WIN32_PROCESS | Where-Object { $_.name -inotmatch '_total|idle' } | Sort-Object -Property ws -Descending | Select-Object -first 15 processname, processid, @{Name="Mem Usage(%)";Expression={[math]::round(($_.ws*100)/$RAM,2)}}
Get-CPU-Memoria.txt