2017-04-03 899 views
1

問題定義:我們在我們的Web服務器(基本上是IIS服務器)中進行了一些配置級別的更改。我們將線程數從默認300增加到450.使用Powershell導出Windows資源監視器數據

而這種更改可能會導致我們的服務器崩潰。

所以我們希望監視工作線程,並且我們希望定期將其記錄到數據庫中。

我迄今取得的進展:

到目前爲止,我能有一個EXE與下文提到的PowerShell命令運行以獲得詳細信息。

(只需更換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結果?

表應該是

處理器名稱| PID |工作者姓名|線程數|

回答

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 S和它似乎是工作的罰款。

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

This Works mate!謝謝馬特。 –