As a PowerShell beginner and with the help of a PowerShell IDE, I was able to conjure something rudimentary up.
The Mission
Find 5 running processes sorted on highest CPU load and their use of RAM (working set, not private memory):
The result
Get-Process | Sort -Property CPU -Descending | ? {$_.mainwindowtitle.length -ne 0} | Select Name, @{Label="Application"; Expression={$_.mainwindowtitle}}, @{Label="State"; Expression={"Running"}}, CPU, @{Label="Working Set"; Expression={"{0,12:n0} KB" -f ($_.WS/1kb)}} | Select -First 5or send this data to file:
Get-Process | Sort -Property CPU -Descending | ? {$_.mainwindowtitle.length -ne 0} | Select Name, @{Label="Application"; Expression={$_.mainwindowtitle}}, @{Label="State"; Expression={"Running"}}, CPU, @{Label="Working Set"; Expression={"{0,12:n0} KB" -f ($_.WS/1kb)}} | Select -First 5 | Export-Csv -Path G:\Temp\log1.csv -NoTypeInformationBoth lines above show only a limited set of data (the requested data). If you want the standard output use the following line:
The screen layout looks like:
Handles: NPM: PM: WS: VM: CPU: ID: ProcessName:
Get-Process | Where { $_.cpu -gt 0 } | Sort -Property CPU -Descending | Select -First 5or send this data to file (this file will show a boatload of information...be warned!):
Get-Process | Where { $_.cpu -gt 0 } | Sort -Property CPU -Descending | Select -First 5 | ConvertTo-Csv | Out-File -FilePath G:\Temp\log2.csvStill-to-do
Filenames should contain the date-time when they are generated. Right now I'm overwriting files. Appending data could be a solution, but I did not find such an option yet in my travels.
Notes
Save the one you like into a text file with the extension .ps1 (for example: FileNameYouDesire.ps1) and use the Windows task scheduler to run this file at the desired interval. To my knowledge you can start a script in administrator mode with the Windows 7 Task scheduler (but I'll deny having said that in court

).
You will get different results, depending the level of user you login with. The adminstrator account will show you everything, when using this on a limited user account you'll see the information from processes etc. associated with the current user only. That is the way how PowerShell works.
You see me use two different ways to write the data to file. The method 'Export-Csv' is not UTF8 friendly. Reading the file into LibreOffice at first showed garbage, but all data became visible after changing the characterset from 'UTF8' to 'Western-Europe (ASCII/US)'. The other method ConvertTo-Csv did not require this change when being read into LibreOffice.
As the commands are basic, these will work on each version of PowerShell. I would upgrade the PowerShell on XP to the highest version available though. My computer at home is not (or will be) connected to the internet, so I didn't see a reason yet to upgrade to Win7 SP1. IIRC Win7 comes with PowerShell version 2, which is upgraded to version 3 after service pack 1. XP on the other hand cannot upgrade to more than version 2.
Another idea one could entertain is to write this data into the appropiate EventLogViewer from Windows itself and use that software to get an overview. Ok, I might fill my next Saturday afternoon with this puzzle.