You may already know about the Get-Process cmdlet, which lists all running processes, locally and remotely (use -computername for remote access). But did you know that the folks at Microsoft added the -FileVersion switch parameter in PowerShell v.2? With it, you can get the files (and versions) the running processes are using:
Get-Process -FileVersion
You may receive error messages for files you do not have the privileges to access. In this case, you may want to hide the error messages:
Get-Process -FileVersion -ea SilentlyContinue