找出哪台计算机打开了服务器网络共享上的文件

找出哪台计算机打开了服务器网络共享上的文件

我有一台 Windows Server 2008,它共享一个文件夹。许多客户端访问该文件夹和继承文件。一个客户端偶尔以 rw 模式打开一个 dll 文件,因此此后其他客户端都无法加载该 dll。

现在我想确定哪个客户端执行了此操作。我找到的所有工具:

  • 打开文件
  • 分享观察
  • 网络共享监控

没有显示以 rw 模式打开文件的网络客户端。

我认为它是防病毒程序,但我需要知道哪个客户端打开了该文件。

编辑:

  • 客户端是 Windows 机器
  • 所有客户端都使用同一个用户,所以我无法确定用户名对应的客户端

答案1

这可能对你有用:

在此处输入图片描述

我不能确定它在服务器版本上的位置是否相同,但我通过Win+ X-> Computer Management-> System Tools-> Shared Folders->访问了它Open Files

这里列出了每个打开的文件句柄、其“打开模式”(读/读写)和用户。您还可以从此位置关闭文件句柄。

答案2

多年来我们一直想这样做!

今天我们发现了这个实用程序:

https://www.nirsoft.net/utils/network_opened_files.html

极好的!

编辑:

您可以使用 Nirsoft 的 NetworkOpenedFiles 来确定哪个主机在 Windows 文件共享上打开了文件。

答案3

这是一个老问题,但尽管如此:

如果您拥有 PowerShell 4.0+(Windows Server 2008 未附带,您必须更新您的 PowerShell 版本),您可以使用以下命令:

直接在服务器上:

Get-SmbOpenFile | where-object { $_.Path -like 'C:\foo\bar\*' }

从 RemoteMachine:

$cim = New-CimSession ServerName -Credential (get-credential)
Get-SmbOpenFile -CimSession $cim | where-object { $_.Path -like 'C:\foo\bar\*' }

Get-SmbOpenfile返回服务器上所有打开的文件的列表,我们对其进行过滤以where-object仅查看我们正在寻找的文件。

除其他信息外,这将返回ClientComputerName打开该文件的计算机的 IP。

以下是示例输出:

PS C:\WINDOWS\system32> get-smbopenfile -cimsession $cim | where-object { $_.Path -like 'D:\Daten\Transfer\*' }

    FileId       SessionId    Path                 ShareRelativePath ClientComputerName ClientUserName PSComputerName
    ------       ---------    ----                 ----------------- ------------------ -------------- --------------
    347355680805 348160786757 D:\Daten\TRANSFER\xy TRANSFER\xy       10.0.0.114         INTERNAL\xy    Server

如果您想快速查看返回的 IP 地址的主机名,请使用:

[Net.DNS]::GetHostByAddress("10.0.0.114") | select -expand HostName

相关内容