2

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

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

  • открыть файл
  • сеть
  • sharewatch
  • NetShareMonitor

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

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

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

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

3 ответа3

2

Это старый вопрос, но тем не менее:

если у вас 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
1

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

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

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

Фантастика!

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

Вы можете использовать NetworkOpenedFiles от Nirsoft, чтобы определить, на каком хосте есть открытый файл в общей папке Windows.

1

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .