我想使用 powershell 对进程进行用户转储我该怎么做?我在任务管理器中右键单击该进程时得到的相同
4 回答
基于来自 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
最简单的方法是使用Sysinternals 工具包中的Procdump。用于Get-Process
获取进程 ID,您可以将其传递给 Procdump 以进行实际转储。
编辑:
我仍然宁愿使用现成的工具而不是硬的方式。你有正当的商业理由吗?由于您坚持,有一个创建用户模式内存转储的Win32 API 调用。它可以从.Net 代码中调用,因此可以使用 P/Invoke 或将 C# 嵌入到您的 Powershell 代码中。这留给读者作为练习。
嗨,对不起,我帮不上什么忙。我以前从未使用过 DUP 文件。但是有一个名为 Win32_Process 的 WMI 类:
Get-WMIObject -Class Win32_Process
不确定这是否是您要查找的信息。具有与 Get-Process 不同的属性。
我有一个类似的用例,我需要为 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%'"