我想使用powershell获取进程的用户转储我该怎么办? 我在右键单击Taskmanager
中的过程答案 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