如何使用PowerShell进行用户转储

时间:2013-03-20 12:23:01

标签: powershell powershell-v2.0 dump coredump

我想使用powershell获取进程的用户转储我该怎么办? 我在右键单击Taskmanager

中的过程

4 个答案:

答案 0 :(得分:2)

最简单的方法是使用Sysinternals工具包中的Procdump。使用Get-Process获取进程ID,您可以将其传递给Procdump进行实际转储。

修改

我仍然宁愿使用现成的工具而不是艰难的工具。你有有效的商业理由吗?由于您坚持,有一个Win32 API call可以创建用户模式内存转储。它可以从.Net code调用,因此要么使用P / Invoke,要么将C#嵌入到Powershell代码中。这留给读者练习。

答案 1 :(得分:0)

对不起,我帮不了多少。我以前从未使用过DUP文件。但是有一个名为Win32_Process的WMI类:

Get-WMIObject -Class Win32_Process

不确定这是否是您要查找的信息。具有与Get-Process不同的属性。

答案 2 :(得分:0)

我有一个类似的用例,需要为IIS进程创建转储。当然,我本可以使用DebugDiag,但最终还是走了这条路。这是我使用的(,效果很好,我应该添加):

$procid = Get-Process | Where-Object {$_.ProcessName -eq 'w3wp'} | Select-Object ProcessName,Id
New-Item -Path "c:\temp\Dumps" -Type directory -Force
cmd.exe /c "c:\temp\procdump64.exe" $procid.id -accepteula -mp "c:\temp\Dumps"

此外,您也可以使用DebugDiag将这些转储文件用于分析。所以我认为这是双赢的。

  

PS:理论上,也可以使用Get-CimInstance cmdlet获取进程ID。所以类似的事情也可以工作:

     

Get-CimInstance -Query "SELECT * from Win32_Process WHERE name LIKE 'w3wp%'"

答案 3 :(得分:0)

基于this article,来自Risksense。可以使用来自本地MiniDump Windows dll的comsvcs.dll函数。

赞:

Powershell -c rundll32.exe C:\Windows\System32\comsvcs.dll, MiniDump {ID-of-the-process} $Env:TEMP\my_dump_file.bin full