找出哪台電腦開啟了伺服器網路共用上的文件

找出哪台電腦開啟了伺服器網路共用上的文件

我有一個 Windows Server 2008,它共用一個資料夾。許多客戶端存取該資料夾和繼承文件。一個客戶端偶爾會以 rw 模式開啟一個 dll 文件,因此此後其他客戶端都無法載入該 dll。

現在我想確定是哪個客戶做的。我找到的所有工具:

  • 開啟文件
  • 分享觀察
  • 網路共享監控器

沒有向我顯示以讀寫模式開啟檔案的網路用戶端。

我認為這是防毒程序,但我需要知道哪個客戶端打開了該文件。

編輯:

  • 客戶端是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\*' }

從遠端機器:

$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

相關內容