我想用下面的powershell脚本获取Windows进程的内存转储。
我曾经尝试过这个脚本。但是它给予以下错误:
方法调用失败,因为[System.RuntimeType]不包含名为“GetCurrentThreadId”的方法。
#############################################################
$process = Get-Process -Name AggregatorHost
$threadId = [System.Diagnostics.Process].GetCurrentThreadId()
$thread = $process.Threads | Where-Object { $_.Id -eq $threadId }
$thread.Export("test.dmp")
###################################################################
如何解决这个问题或请告诉我,如果你有其他办法?
powershell内存转储
2条答案
按热度按时间bq9c1y661#
Process.GetCurrentTheadId
是一个 static 方法,因此需要使用静态成员调用操作符::
(与常规成员调用操作符.
相反):话虽如此,我怀疑您提供的代码是否能达到预期效果-
GetCurrentThreadId
将从powershell进程 * 中的执行线程 * 获取线程ID,并且您不会在同一个 Boot 周期中找到属于另一个进程 * 的相同线程ID2uluyalo2#
[System.RuntimeType]
不包含名为"GetCurrentThreadId
"的方法。让我们找到一个类型 * 包含 * 这样的方法:
但是,下面的代码片段显示以这种方式标识的线程(
System.AppDomain
class的GetCurrentThreadId
静态方法)属于调用进程(因此,在Get-Process -Name AggregatorHost
中找不到):一个二个一个一个
此外:
AppDomain.GetCurrentThreadId
已被弃用,因为当托管线程在纤程(即轻型线程)上运行时,它不提供稳定的ID。若要获取托管线程的稳定标识符,请改用Thread
上的ManagedThreadId
属性。