Sysinternals 处理关闭命令吗?

Sysinternals 处理关闭命令吗?

https://docs.microsoft.com/en-us/sysinternals/downloads/handle>>> 我在此网站上下载了该文件。一切都很好,但我无法完全按照自己的意愿行事。我用视频准确地解释了我想要的内容。我正在编写一个应用程序。我已将其设置为通过 CMD 工作。如何使用 CMD 中的单个代码关闭指定的目录?我想在不需要 handles-id 的情况下执行此操作。我想将其准备为代码。请帮助我。 :(

这段代码的工作原理如下。但我想在不需要 handle-id 的情况下执行此操作。

handle -c 0x1a2c -p Notepad.exe

我想这样做。但是不行。

handle -c C:\Users\dream -p notepad.exe

我想像这个视频中那样做。如何使用 cmd 命令执行此操作?我只想指定一个句柄目录。示例: https://www.youtube.com/watch?v=cC2-5PPpLBo

答案1

危险!强行关闭手柄可能会导致级联故障和数据损坏在目标过程中。

如果您无论如何都想这样做,可以使用下面的 PowerShell 脚本。它需要两个参数:目标进程的名称,然后是要关闭句柄的文件/目录的路径。它要求handle将实用程序放在同一目录中。

$targetPid = $null
$targetFile = $args[1]
.\handle -p $args[0] | % {
    If ($_ -match 'pid: (\d*) ') {
        $targetPid = $Matches[1]
    } ElseIf ($_ -match '([0-9A-F]*): File.{10}(.*)') {
        If ($Matches[2] -eq $targetFile) {
            .\handle -c $Matches[1] -p $targetPid -y | Out-Null
        }
    }
}

首先,它调用handle列出目标进程的句柄。然后它循环遍历输出行,并使用以下代码对其进行解析:常用表达。当它看到指定目标进程 PID 的行时,它会记录下来以供以后使用。当它稍后看到有关文件句柄的行时,它会检查该文件是否是作为命令行参数指定的文件,如果是,则handle再次调用以关闭它。

如果脚本保存为handleclose.ps1,您可以从命令提示符运行它,如下所示:

powershell -ExecutionPolicy Bypass -c .\handleclose.ps1 TargetProcess.exe 'C:\path\to\file'

提示:如果你正在寻找一种 GUI 方式来查看和关闭句柄,Sysinternals进程探索器可以做到这一点。

答案2

如果目的是终止一个进程,其中发现可执行文件的名称和正在使用的某个文件的路径,它们在给定的 PID 中重合...

在命令行中:

wmic process where "name like '%notepad.exe%' and commandline like '%C:\\Users\\dream%'" delete

在 bat/cmd 文件中:

wmic process where "name like '%%notepad.exe%%' and commandline like '%%C:\\Users\\dream%%'" delete

在 PowerShell 中使用Get-WmiObject

Get-WmiObject Win32_Process | % { if ($_.ProcessName -like '*Notepad.exe*' -and $_.CommandLine -like '*C:\Users\dream*') {kill $_.ProcessId}}

使用Get-CimInstance Win32_Process

Get-CimInstance Win32_Process -Filter "name='notepad.exe'" | % { if ($_.CommandLine -like '*C:\Users\dream*') {kill $_.ProcessId}}

# Or.... 
Get-CimInstance Win32_Process -Filter "name='notepad.exe'" | 
% { if ($_.CommandLine -like '*C:\Users\dream*') {kill $_.ProcessId}}

在此处输入图片描述

其他资源:

答案3

使用 csv 输出和 powershell,这非常简单。现在你需要数字 PID 来关闭句柄,否则你只会得到使用帮助消息。Handle64.exe 可能会在执行这些操作时崩溃,唯一的选择可能是重新启动以以同一用户身份再次运行句柄。是/否提示在invoke-command 上不起作用。

handle js2010 -p emacs -nobanner -v | convertfrom-csv

Process : emacs.exe
PID     : 12616
Type    : File
Handle  : 0x00000040
Name    : C:\Users\js2010

它询问 y/n 而我回答 n。$name 和 $process 可以是部分匹配。

$name = 'js2010'
$process = 'emacs'

handle $name -p $process -nobanner -v | convertfrom-csv | 
  % { handle -nobanner -c $_.Handle -p $_.PID }

   40: File          C:\Users\js2010
Close handle 40 in emacs.exe (PID 12616)? (y/n) n

Handle close aborted.

相关内容