当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 如何使用 SysInternals 处理工具追踪锁定文件

作者:精品下载站 日期:2024-12-14 20:48:06 浏览:13 分类:玩电脑

如何使用 SysInternals 处理工具追踪锁定文件


Sysinternal 的 handle.exe 是一个第三方工具,可以帮助跟踪锁定您尝试访问的文件的进程。在本文中,您将学习如何下载句柄实用程序,甚至构建一个小型 PowerShell 脚本来自动执行查找锁定文件的过程!

跟踪打开文件的进程的最佳方法是第三方实用程序handle.exe。作为流行的 SysInternals 工具集的一部分,handle.exe 会查看文件系统并尝试查找所有打开的文件句柄。

作为其输出的一部分,它还返回进程。我们可以使用一些 PowerShell 来围绕该实用程序包装一些代码,以提供一种简单的方法来为 handle.exe 提供特定的文件路径,然后向其呈现一个进程。

下载句柄

首先,您需要下载并解压手柄。这可以手动完成,或者如果您像我一样是 PowerShell 极客,则可以通过 PowerShell 完成。

Invoke-WebRequest -Uri 'https://download.sysinternals.com/files/Handle.zip' -OutFile C:\handle.zip
PS> Expand-Archive -Path C:\handle.zip

运行手柄

下载后,现在让我们运行句柄并查看输出是什么样的。您可以看到输出非常难看,并且无法通过文件名来限制它。

[玩转系统] 如何使用 SysInternals 处理工具追踪锁定文件

仅使用标准输出,追踪锁定的文件将是一件痛苦的事情。要解决这个问题,您可以创建一个小 PowerShell 函数来解析输出并仅查找您感兴趣的行。

function Find-LockedFileProcess {
     param(
         [Parameter(Mandatory)]
         [string]$FileName,
 
         [Parameter()]
         [string]$HandleFilePath = 'C:\Handle\handle.exe'
     )
 
     $splitter = '------------------------------------------------------------------------------'
     $handleProcess = ((& $HandleFilePath) -join "`n") -split $splitter | Where-Object {$_ -match [regex]::Escape($FileName) }
     (($handleProcess -split "`n")[2] -split ' ')[0]
 }

这个 PowerShell 小函数正在执行大量文本解析。不幸的是,Sysinternals handle.exe 是一个命令行实用程序。当它被创建时,它不知道 PowerShell 是什么,所以与当时的其他实用程序一致,只是将一堆文本转储到控制台。

正如您所看到的,我们可以使其更加用户友好,但它需要一些丑陋的字符串解析,例如使用拆分运算符、换行符(`n)和一些正则表达式。无论如何,只需要做一次,我已经帮你做了!

现在让我们将此函数复制并粘贴到 PowerShell 控制台中并试一试。我打开了一个名为 TestWordDoc.docx 的 Microsoft Word 文档。我知道Word 在打开文件时会锁定该文件。让我们看看我们的函数是否可以找到哪个进程正在锁定该文件。

PS> Find-LockedFileProcess -FileName TestWordDoc.docx
WINWORD.EXE

成功!您可以立即查看,而不是立即查看所有输出;我们可以提供单个文件名并返回单个进程。这正是我们所追求的。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯