Wmic hanging on remote server

pstoolswindows-server-2003windows-server-2008wmi

Based on information from my previous question, I'm trying to learn wmic.

I'm playing around with trying to look at which processes are using the most resources on a remote server. What I've managed to come up with is near the bottom of this post. It works very well on my local machine, but when I psexec into a server (Windows 2003 or 2008) and try to run this command, it hangs nearly every time. I can't even ctrl+c to get it to stop. I used RDP (using a different username) to get into one of the machines where this command hangs. The username that sends the command from psexec shows two items listed in Task Manager, cmd and wmic. They've remained in Task Manager several hours after sending the command. When I end them, it frees up my console on my local machine.

I've tried looking up reasons this might be hanging, and I cannot find anything. I also asked one of my system admins, but those guys are always way too busy to help a lowly NOC guy (legitimately, though. They really are very busy). Any ideas as to what might be going wrong?

wmic path win32_perfformatteddata_perfproc_process where (PercentProcessorTime != 0) get Name, PercentProcessorTime, IDProcess

Best Answer

I'd strongly recommend moving away from WMIC.EXE, and use PowerShell instead. PowerShell lets you use RPC to access the remote server's WMI interface, negating the need for PsExec. Although PsExec is a useful tool, I'd only use it if absolutely necessary, as it creates a service on the remote server, the newly created remote service then spawns a process to run your code, and the service is then supposed to auto-delete. However, I've come across servers that have failed PsExec services, and numerous orphaned processes that have failed for one or another reason. So, with my preaching over, here's an equivalent using PowerShell:

Get-WmiObject -ComputerName "<REMOTE-SERVER-NAME>" -class Win32_PerfFormattedData_PerfProc_Process -Impersonation Impersonate -Filter "PercentProcessorTime != 0 and name != '_Total'" | Select-Object name, PercentProcessorTime, IDProcess