使用Powershell导出Windows资源监视器数据

时间:2017-04-03 10:50:16

标签: windows powershell

问题定义:我们在Web服务器中完成了一些配置级别更改,基本上是IIS服务器。我们增加了从默认300到450的线程数。

此更改可能会导致我们的服务器崩溃。

因此,我们希望监视工作线程,并且我们希望定期将其记录到数据库中。

我的进展到目前为止:

到目前为止,我能够通过下面提到的Powershell命令运行一个exe来获取详细信息。

(只需将w3wp.exe替换为任何进程名称即可获得结果)

$name = "w3wp.exe" 
$processHandle = (Get-CimInstance Win32_Process -Filter "Name = '$name'").ProcessId
$Threads = Get-CimInstance -Class Win32_Thread -Filter "ProcessHandle = $processHandle"
$threads | Select-Object priority, thread*, User*Time, kernel*Time |
Out-GridView -Title "The $name process has $($threads.count) threads"

问题:在上面提到的PowerShell脚本中,当w3wp.exe运行多个PID时,它无法为exes提供结果。

我们有办法获得多个正在运行的exes的结果吗?

表应为

处理器名称| PID |工人姓名|线程数|

1 个答案:

答案 0 :(得分:1)

所以,我运行你的代码时遇到了错误,我希望你能得到它

 Get-CimInstance : Invalid query 
 At line:3 char:12
 + $Threads = Get-CimInstance -Class Win32_Thread -Filter "ProcessHandle ...
 +            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     + CategoryInfo          : InvalidArgument: (:) [Get-CimInstance], CimException
     + FullyQualifiedErrorId : HRESULT 0x80041017,Microsoft.Management.Infrastructure.CimCmdlets.GetCimInstanceCommand

这是有道理的,因为-Filter看起来像这样......就像我使用chrome.exe作为测试一样。哪个无效。

ProcessHandle = 7224 7420 8688 8800 8916 460 10884 7340 10956 6756 14604 13260 9588 18020 22264 11516 17684 12664

所以我只是在一个循环中添加了允许多个$processHandle,它似乎工作正常。

$Threads = $processHandle | Foreach-Object{
    Get-CimInstance -Class Win32_Thread -Filter "ProcessHandle = $_"
}