узнать, какой компьютер открыл файл на сетевом ресурсе сервера

узнать, какой компьютер открыл файл на сетевом ресурсе сервера

У меня Windows Server 2008, и он расшаривает папку. Многие клиенты получают доступ к этой папке и наследуют файлы. Один клиент время от времени открывает один файл dll в режиме rw, поэтому после этого никакой другой клиент не может загрузить dll.

Теперь я хочу определить, какой клиент это делает. Все найденные мной инструменты:

  • открыть файл
  • сеть
  • поделитьсясмотреть
  • NetShareMonitor

не показывает мне сетевой клиент, который открывает файл в режиме чтения/записи.

Я думаю, что это антивирусная программа, но мне нужно знать, на каком клиенте открыт файл.

Редактировать:

  • Клиенты — машины Windows.
  • Все клиенты используют одного и того же пользователя, поэтому я не могу определить клиента по имени пользователя.

решение1

Это может быть вам полезно:

введите описание изображения здесь

Я не уверен, что это то же самое место в Server Edition, но я получил к нему доступ через Win+ X-> Computer Management-> System Tools-> Shared Folders->Open Files

Здесь перечислены все открытые дескрипторы файлов, их "режим открытия" (чтение/чтение/запись) и пользователь. Вы также можете закрыть дескриптор файла из этого места.

решение2

Мы хотели сделать это много лет!

Сегодня мы заметили эту утилиту:

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

Фантастика!

Редактировать:

Вы можете использовать NetworkOpenedFiles от Nirsoft, чтобы определить, на каком хосте открыт файл в общей папке 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увидеть только те, которые ищем.

Это вернет, среди прочего, ClientComputerNameIP-адрес компьютера, открывшего файл.

Вот пример вывода:

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

Связанный контент