10

我想使用 powershell 对进程进行用户转储我该怎么做?我在任务管理器中右键单击该进程时得到的相同

4

4 回答 4

7

基于来自 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
于 2019-11-13T21:52:39.163 回答
2

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

编辑:

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

于 2013-03-20T12:52:56.920 回答
0

嗨,对不起,我帮不上什么忙。我以前从未使用过 DUP 文件。但是有一个名为 Win32_Process 的 WMI 类:

Get-WMIObject -Class Win32_Process

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

于 2013-03-21T05:35:49.760 回答
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-CimInstancecmdlet 获取进程 ID。所以这样的事情也可以工作:

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

于 2018-12-20T10:47:46.907 回答