我有一個 Windows Server 2008,它共用一個資料夾。許多客戶端存取該資料夾和繼承文件。一個客戶端偶爾會以 rw 模式開啟一個 dll 文件,因此此後其他客戶端都無法載入該 dll。
現在我想確定是哪個客戶做的。我找到的所有工具:
- 開啟文件
- 網
- 分享觀察
- 網路共享監控器
沒有向我顯示以讀寫模式開啟檔案的網路用戶端。
我認為這是防毒程序,但我需要知道哪個客戶端打開了該文件。
編輯:
- 客戶端是windows機器
- 所有客戶端都使用同一用戶,因此我無法透過用戶名確定客戶端
答案1
答案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