【问题标题】:Retrieving dll path of a running process检索正在运行的进程的 dll 路径
【发布时间】:2012-01-27 22:45:32
【问题描述】:

我有一个使用 .dll 文件的应用程序,该文件有 2 个不同的位置,我需要找出它在 200 多台机器上使用的位置。

我对 power shell 很陌生,并且尝试过 Get-Process 方法,但它没有提供我需要的信息,是否有另一种方法可以在 power shell 中检索它?

【问题讨论】:

    标签: scripting powershell batch-file


    【解决方案1】:

    article 提供了一种使用 WMI 提供程序调用的方法。您可以在最后使用提供的功能。如果您只是在寻找快速而肮脏的东西,这会起作用。

    再深入一点,这可能就是你想要的:

    $modules = Get-Process | Where { $_.ProcessName -eq "process.name" } | Select Modules
    $modules.Modules
    

    将 process.name 替换为您的进程名称

    【讨论】:

    • 这没有输出任何东西,我做了和你在这里做的完全一样的事情,但是改变了我的进程名称
    • 注意到代码中有错字。您的流程是标准流程吗?您是否使用了刚刚运行 Get-Process 时显示的名称?
    • 从第二个命令中删除文件名,不知道是怎么回事。
    • 以 Chrome 为例。我想知道它正在使用的确切 dll,包括这些 dll 的文件路径,而不使用任何第三方应用程序。通过上面的代码,我终于捕捉到了类型(SMH),它返回了所有 Chrome 进程,但没有文件路径
    • $modules = Get-Process |其中 { $_.ProcessName -eq "chrome" } |选择模块将返回我机器上运行的“chrome”(注意区分大小写)进程的列表。因为我有多个“chrome”实例,所以我需要执行 $modules[0].Modules 来获取列表。请参阅@Rynant 的回答以在一个命令中执行此操作。
    【解决方案2】:

    进程的 DLL 包含在 Get-Process 返回的 Process 对象的 Modules 属性中。

    Get-Process notepad| select -ExpandProperty modules| Format-Table -AutoSize
    

    要查找特定的 DLL,您可以执行以下操作:

    Get-Process chrome| 
        select -ExpandProperty modules|
        foreach { if($_.ModuleName -eq 'pdf.dll'){$_.Filename} }
    

    由于可能有许多同名的进程,您可以使用它来仅显示不同的 DLL 位置:

    Get-Process chrome| 
        select -ExpandProperty modules|
        where {$_.ModuleName -eq 'pdf.dll'}|
        group -Property FileName|
        select name
    

    【讨论】:

      【解决方案3】:

      不久前我写了一篇关于如何查找由特定进程加载的 DLL 的文章。您可能可以修改此代码以找到您的特定 DLL。

      http://trevorsullivan.net/2010/08/25/powershell-finding-currently-loaded-dlls/

      【讨论】:

        猜你喜欢
        • 2011-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-29
        • 2023-03-08
        • 1970-01-01
        • 1970-01-01
        • 2011-11-26
        相关资源
        最近更新 更多