使用特定dll查找和终止进程的脚本化方法

时间:2019-01-22 14:32:47

标签: windows sysinternals

在我们深入研究并找到原因之后,我需要您的帮助来制作一个脚本来缓解问题的症状。

问题描述:我们有一个问题,其中dll被锁定,这将阻止IIS处理请求。有几个dll可能是问题所在。我们将它们映射为Windows Defender的例外,但问题仍然存在。

我们可以通过编写脚本来定期访问该网站来检测问题,如果该问题发生,该网站将停止运行。

这是在Windows 2016 Server上。

要求:显然,需要长期修复,我们正在努力解决。在找到该修补程序的同时,我们正在寻找一种方法来查找使用dll的进程并杀死该进程。

SysInternals ProcessExplorer可以识别正在访问dll文件的进程(这是双筒望远镜功能)。一旦知道了哪个进程,我们就可以在ProcessExplorer中终止该进程。

理想的解决方案是使用指定的dll名称搜索进程然后杀死它们的脚本。我想我们可以使用sysinternals的命令行实用程序,但不知道从哪里开始。

注意:理想情况下,我们将解决此问题,但此问题仍在持续,因此我们希望减轻症状。你们中的一些人可能会建议解决此问题,如果您有解决方案,则将其发送给我。与此同时,这里可能会问一些问题……是什么原因导致的问题-如果我们知道这一点……! Windows Defender签名更新运行后,似乎会出现此问题。就像Windows Defender重新启动以加载新的威胁特征时,内存中的dll以某种方式被视为威胁。这可能是一个真正的威胁-否,因为我们手动扫描了它,然后它变得干净了。

1 个答案:

答案 0 :(得分:0)

您可以使用PowerShell。这是一个开始。

注意:

  • 它不执行任何检查以查看该进程是否已终止。
  • 它使用PID发出终止,因为它比进程名称更安全。
  • 它使用模块的完整路径来使检测更加精确。
  • 默认情况下,代码不会终止进程,一旦高兴,请将KillIt变量更改为$ true。

如果通用概念可以为您标识流程并且默认的“停止流程”适用于所涉及的流程,这将非常有用:

$ModulePathToFind = "C:\\Windows\\System32\\msxml6.dll"    
$KillIt           = $false

foreach ($p in Get-Process)
{
    foreach ($m in $p.modules)
    {
        if ( $m.FileName -match $ModulePathToFind)
        {
            write-host "Found:" $m.FileName "in" $p.Name "ID:" $p.id

            if ($KillIt)
            {
                write-host "In 'Kill' mode."
                Stop-Process -Id $p.id -Force
            }
            else
            {
                write-host "Not in 'Kill' mode."
            }
        }
    }
}
相关问题