У меня 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
увидеть только те, которые ищем.
Это вернет, среди прочего, 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