Как узнать кто открыл файл по сети
Перейти к содержимому

Как узнать кто открыл файл по сети

  • автор:

Как узнать кто открыл файл по сети

Если вы решите открыть на своем рабочем или домашнем компьютере доступ к папкам, то наверняка также захотите знать, кто и когда подключается к расшаренным вами каталогам и какие файлы в них просматривает или редактирует. Реализовать отслеживание использования общих папок в Windows не составляет особого труда, для этих целей в самой системе предусмотрена соответствующая оснастка, а еще вы можете воспользоваться сторонними решениями, например, бесплатной утилитой NetShareMonitor.

Управление компьютером

Это наиболее простой способ мониторинга общих папок.

Откройте оснастку «Управление компьютером» командой compmgmt.msc или compmgmtlauncher и разверните в колонке слева пункт «Общие папки».

Раздел содержит три каталога: Общие ресурсы , Сеансы и Открытые файлы .

Первый каталог содержит список всех общих ресурсов на вашем компьютере, в том числе служебных. Таков, к примеру, IPC$ — ресурс совместного доступа к каналам, обеспечивающий связь между приложениями и используемый службами серверов.

Общие папки

Для каждого открытого ресурса выводятся сведения — количество активных подключений, тип и путь к папке, если же кликнуть по ресурсу дважды мышкой, откроется окно свойств ресурса, в котором можно установить ограничения на его использование — задать лимит на количество одновременных активных подключений, изменить права доступа и так далее.

Из окна свойств вы также можете принудительно закрыть любое подключение.

Общие

В подразделе «Сеансы» предоставляется информация о пользователях, подключенных к общему ресурсу, в частности, имя пользователя и компьютера в локальной сети, тип подключения и количество открытых файлов, время подсоединения и время простоя.

Сеансы

Наконец, в подразделе «Открытые файлы» выводится список всех файлов и папок, которые в данный момент открыты подключившимися к расшаренной папке пользователями. Помимо пути к ресурсу, указываются также имя работающего с ним пользователя, тип подключения и режим открытия (чтение и/или запись) .

Открытые файлы

NetShareMonitor

Программа NetShareMonitor дублирует «Общие папки» оснастки «Управление компьютером», преимущество ее заключается главным образом в звуковом оповещении администратора о новых подключениях и сохранении сведений о подключениях в лог.

NetShareMonitor

Интерфейс NetShareMonitor представлен тремя вкладками «Активные сеансы», «Доступные файлы» и «Общие файлы», всё по аналогии с общими папками в управлении компьютером.

NetShareMonitor - Shared Files

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

NetShareMonitor - Settings

Минус — отсутствие русского языка интерфейса, впрочем, недостаток этот несущественный, чего нельзя сказать о звуковых оповещениях. Их и впрямь лучше отключить, так как издаваемый программой сигнал настолько громкий и пронзительный, что больше похож на предупреждающую об опасности сирену, чем на простое оповещение.

На общедоступном сетевом ресурсе могут возникать ошибки доступа к файлам. Причиной этому является некорректно завершенная сессия пользователя, ошибки в работе ПО или просто кто-то открыл файл и не закрывает его. В такой ситуации файл оказывается заблокированным и не доступен для работы другим пользователям.

Решить проблему доступа к файлу можно путем закрытия сеансов использующих этот файл. В этой статье я расскажу как определить кто открыл файл в сетевой папке и как закрыть это подключение.

Рассмотрим два способа:

  1. Через оснастку «Управление компьютером» консоли управления Windows;
  2. При помощи утилиты командной строки — Openfiles.

1 способ. Получаем список открытых файлов с помощью оснастки «Управление компьютером».

Для получения списка открытых файлов на файловом сервере воспользуемся оснасткой консоли «Управление компьютером». Для запуска оснастки нажимаем сочетание клавиш «Win + R» и набираем название оснастки «compmgmt.msc».

В иерархии оснастки переходим /Управление компьютером/Служебные программы/Общие папки/Открытые файлы.

В правой части оснастки появится список открытых файлов. Здесь можно увидеть имя пользователя открывшего файл, количество блокировок и режим доступа к файлу.

Закрываем файл. Чтобы закрыть сетевой файл открытый другим пользователем находим его в списке и в контекстном меню выбираем пункт «Закрыть открытый файл».

2 способ. Просмотр открытых файлов через командную строку утилитой Openfiles.

Утилита Openfiles дает нам более широкие возможности по поиску и закрытию заблокированных файлов.

C помощью openfiles можно просмотреть список открытых файлов на сервере удаленно. Для этого открываем командную и запускаем утилиту с параметрами.

где
/Query — показывает все открытые файлы,
/s — определяет имя удаленного компьютера.

В случае, когда необходимо указать логин и пароль пользователя для подключения к удаленному компьютеру, задаются параметры: /u — логин пользователя, /p — пароль пользователя.

По-умолчанию список файлов показан в формате таблицы, но есть параметры позволяющие изменить формат вывода:

/fo csv — выводит список в формате csv с разделителем запятая;
/fo list — показывает открытые файлы в формате списка;
/fo table — формат таблицы.

Определяем кто открыл сетевой файл.

Чтобы найти пользователя, который открыл и заблокировал нужный нам файл запускаем Openfiles с командой find.

в команде find указан параметр /i, чтобы поиск был регистронезависимым.

После того когда мы узнали имя пользо

Закрываем заблокированный сетевой файл.

Закрыть открытый файл можно по id сессии таким способом:

Закрыть все сетевые подключения к файлам и папкам, которые открыл пользователь BadUser:

Закрыть все файлы и директории открытые в режиме чтение/запись:

Закрыть все подключения к директории с именем «c:\myshare»:

Чтобы сбросить все сессии на удаленном сервере FileServer, которые открыл пользователь domain\baduser, независимо от id сессии:

date

directory

Windows 10, Windows Server 2012 R2, Windows Server 2016

comments

Если вы администрируете общие сетевые папки Windows, скорее всего вы периодически сталкиваетесь с просьбами пользователей принудительно закрыть файлы, открытые (заблокированные) в сетевых папках другими пользователями. Обычно это связано с некорректной работой программы, неправильном завершении сессии пользователя или ситуациях, когда пользователь открыл файл и забыл закрыть его (ушел домой, в отпуск и т.д.). Во всех этих случаях файл в сетевой папке оказывается заблокированным, и другие пользователи не могут вносить в него изменения.

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

Вывод списка открытых файлов в сетевой папке Windows

Список открытых по сети файлов в Windows можно получить с помощью стандартной графической консоли Computer Management (Управление компьютером — compmgmt.msc ).

Запустите на файловом сервере консоль Computer Management (или подключитесь к нему консолью удаленно со своего компьютера) и перейдите в раздел System Tools -> Shared Folders -> Open files (Служебные программы -> Общие папки -> Открыты файлы). В правой части окна отображается список файлов на сервере, открытых удаленно. В данном списке указан локальный путь к файлу, имя учетной записи пользователя, количество блокировок и режим, в котором открыт файл (Read или Write+Read).

Открыты файлы на файловом сервере Windows

Этот же список открытых файлов можно получит с помощью встроенной консольной утилиты Openfiles. Например, с помощью следующей команды можно получить id сессии, имя пользователя и полный локальный путь к открытому файлу:

Openfiles /Query /fo csv |more

Openfiles /Query

При удаленном доступе пользователя к папке или файлу в сетевой папке (SMB) на сервере, для пользователя создается новая сессия. Вы можете управлять открытыми файлами с помощью идентификаторов этих сессий.

Вы можете вывести список открытых файлов на сервере удаленно. Например, чтобы вывести все открытые по сети файлы на сервере mskfs01, выполните:

Openfiles /Query /s mskfs01 /fo csv

Команда Openfiles позволяет также вывести список локально открытых файлов. Для этого на сервере нужно включить опцию Maintain Objects List (Построение списка объектов) командой openfiles /local on и перезагрузить сервер. После этого команда Openfiles будет отображать файлы, открытые локальными процессами (этот режим желательно использовать только для отладки, т.к. может негативно сказаться на производительности сервера).

Определяем пользователя, который открыл файл в сетевой папке с помощью Openfiles

Чтобы удаленно определить пользователя, который открыл (заблокировал) файл cons.adm в сетевой папке на сервере mskfs01, выполните команду:

Openfiles /Query /s mskfs01 /fo csv | find /i «cons.adm»

Ключ /i используется, чтобы выполнялся регистронезависимый поиск.

Можно указать только часть имени файла. Например, чтобы узнать, кто открыл xlsx файл, в имени которого есть строка farm, воспользуйтесь таким конвейером:

Openfiles /Query /s mskfs01 /fo csv | find /i «farm»| find /i «xlsx»

Можно, конечно найти открытый файл и в графической консоли Computer Management, но это менее удобно (в консоли нет возможности поиска).

Как принудительно закрыть открытый файл в Windows?

Чтобы закрыть открытый файл, нужно найти его в списке файлов секции Open Files и в контекстном меню выбрать пункт “Close Open File”.

Закрыть открытые файлы в сетевой папке

Если на файловом сервере сотни открытых файлов, найти их в консоли будет непросто. Удобнее воспользоваться утилитой Openfiles. Как мы уже говорили, она возвращает ID сессии открытого файла. Вы можете принудительно закрыть файл и сбросить подключение пользователя по ID SMB сессии. Сначала нужно определить ID сессии открытого файла:

Openfiles /Query /s mskfs01 /fo csv | find /i «farm»| find /i «.xlsx»

Теперь можно принудительно отключить пользователя по полученному идентификатору SMB сессии:

Openfiles /Disconnect /s mskfs01 /ID 67109098

Openfiles Disconnect - отключение файла по id сессии

Можно принудительно сбросить все сессии и освободить все файлы, открытые определённым пользователем:
openfiles /disconnect /s mskfs01 /u corp\aivanova /id *

Обратите внимание, что принудительное закрытие файла, открытого клиентом на SMB сервере, вызывает потерю несохраненных данных. Поэтому команду openfiles /disconnect и командлет Close-SMBOpenFile (рассматривается ниже) нужно использовать с осторожностью.

Get-SMBOpenFile: вывод списка открытых по сети файлов в PowerShell

В версии PowerShell в Windows Server 2012/Windows 8 появились командлеты для управления сетевыми файлами и папками на SMB сервере. Эти командлеты можно использовать чтобы удаленно закрыть открытые по сети файлы.

Список открытых файлов можно получить с помощью командлета Get-SMBOpenFile. Чтобы закрыть файл (сбросить подключение), используется Close-SmbOpenFile.

Для вывода полного списка открытых файлов на сервере, выполните команду:

Get-SMBOpenFile вывод списка открытых файлов на SMB сервере с помощью powershell

Команда возвращает ID файла, ID сессии и полное имя файла.

Можно вывести список открытых файлов с именами пользователей и компьютеров (IP адресами):

poweshell вывод список пользователей, которые открыли файлы в сетевой папке windows

Можно вывести все файлы, открытые определенным пользователем:

Get-SMBOpenFile –ClientUserName «corp\aaivanov» |select ClientComputerName,Path

или с определенного компьютера (сервера):

Get-SMBOpenFile –ClientComputerName 192.168.12.170| select ClientUserName,Path

Можно вывести список открытых файлов по шаблону. Например, все открытые по сети exe файлы:

или файлы с определенным именем:

Чтобы закрыть файл используется командлет Close-SmbOpenFile . Закрыть файл можно по ID:

Close-SmbOpenFile -FileId 4123426323239

Но обычно удобнее закрыть файл по имени:

Get-SmbOpenFile | where | Close-SmbOpenFile -Force

С помощью Out-GridView можно сделать простую графическую форму для поиска и закрытия файлов. Следующий скрипт выведет список открытых файлов. Администратор должен с помощью фильтров в таблице Out-GridView найти, выделить нужные файлы и нажать ОК. В результате выбранные файлы будут принудительно закрыты.

Get-SmbOpenFile|select ClientUserName,ClientComputerName,Path,SessionID| Out-GridView -PassThru –title “Select Open Files”|Close-SmbOpenFile -Confirm:$false -Verbose

Get-SmbOpenFile вместе с out-gridview - powershell скрипт с графическим интерефейсом по выбору и принудительному закрыттию заблокированных (открытых) файлов в windows

Как удаленно закрыть открытые SMB файлы с помощью PowerShell?

Командлеты Get-SMBOpenFile и Close-SmbOpenFile можно использовать чтобы удаленно найти и закрыть открытые файлы. Сначала нужно подключиться к удаленному SMB серверу Windows через CIM сессию:

$sessn = New-CIMSession –Computername mskfs01

Также вы можете подключаться к удаленному серверам для запуска команд через командлеты PSRemoting: Enter-PSSession или Invoke-Command .

Следующая команда найдет SMB сессию для открытого файла *pubs.docx и завершит ее.

Get-SMBOpenFile -CIMSession $sessn | where | Close-SMBOpenFile -CIMSession $sessn

Подтвердите закрытие файла, нажав Y . В результате вы разблокировали открытый файл. Теперь его могут открыть другие пользователи.

Get-SMBOpenFile - удаленное управление открытых файлов

Чтобы убрать подтверждение закрытия файла на сервере, используйте ключ –Force .

С помощью PowerShell вы можете закрыть и разблокировать на файловом сервере все файлы, открытые определенным пользователем (пользователь ушел домой и не освободил файлы). Например, чтобы сбросить все файловые сессии для пользователя ipivanov, выполните:

Get-SMBOpenFile -CIMSession $sessn | where |Close-SMBOpenFile -CIMSession $sessn

Как понятно из заголовка, мы сделаем так, чтобы открытие рабочего файла на общем сетевом диске не осталось бесследным. Макрос будет фиксировать на отдельном (скрытом) листе имя пользователя, открывшего файл, а также дату-время открытия и закрытия файла.

Этап 1. Создаем «Лог»

Добавим в нашу книгу новый лист, куда будет записываться информация о всех пользователях и назовем его, например, Лог. На нем создадим простую шапку будущего журнала учета посетителей:

Отслеживание входа пользователей в книгу Excel Microsoft Excel, Vba, Макрос, Полезное, Контроль, На заметку, Длиннопост, Системное администрирование

Этап 2. Макросы фиксации входа-выхода

Теперь добавим макросы для записи на лист Лог даты-времени и имен пользователей при открытии и закрытии книги. Для этого нужно открыть редактор Visual Basic с помощью сочетания Alt+F11 или с помощью кнопки Visual Basic на вкладке Разработчик (Developer) и найти в левом верхнем углу панель Project (если она не отображается, то включить ее можно сочетанием клавиш Ctrl+R):

Отслеживание входа пользователей в книгу Excel Microsoft Excel, Vba, Макрос, Полезное, Контроль, На заметку, Длиннопост, Системное администрирование

Двойным щелчком откройте модуль ЭтаКнига (ThisWorkbook) и вставьте туда пару наших макросов для обработки событий открытия и закрытия книги:

Private Sub Workbook_BeforeClose(Cancel As Boolean)

‘ищем последнюю занятую строчку в логах

lastrow = Worksheets(«Лог»).Range(«A60000»).End(xlUp).Row

‘заносим дату-время выхода из файла

If lastrow>1 Then Worksheets(«Лог»).Cells(lastrow, 3) = Now

‘сохраняемся перед выходом

ActiveWorkbook.Save

End Sub

Private Sub Workbook_Open()

‘ищем последнюю занятую строчку в логах

lastrow = Worksheets(«Лог»).Range(«A60000»).End(xlUp).Row

‘заносим имя пользователя и дату-время входа в файл

Worksheets(«Лог»).Cells(lastrow + 1, 1) = Environ(«USERNAME»)

Worksheets(«Лог»).Cells(lastrow + 1, 2) = Now

End Sub

Попробуйте открыть-закрыть этот файл пару раз и убедитесь, что на лист Лог попадает ваше имя пользователя (логин входа в Windows) и дата-время:

Отслеживание входа пользователей в книгу Excel Microsoft Excel, Vba, Макрос, Полезное, Контроль, На заметку, Длиннопост, Системное администрирование

Этап 3. Улучшаем надежность

Можно было бы скрыть лист Лог и на этом остановиться, но есть одно «но»: если у пользователя, который открывает нашу книгу, макросы разрешены по умолчанию либо он сам их разрешает, нажав в окне предупреждения на кнопку Включить содержимое, то все в порядке:

Отслеживание входа пользователей в книгу Excel Microsoft Excel, Vba, Макрос, Полезное, Контроль, На заметку, Длиннопост, Системное администрирование

Но что если пользователь не разрешит выполнение макросов или они отключены у него по умолчанию? Тогда наши макросы отслеживания выполняться не будут и фиксации имени и даты не произойдет 🙁 Как же заставить пользователя разрешить использование макросов?

Чтобы обойти эту проблемку воспользуемся небольшой тактической хитростью. Добавьте в нашу книгу еще один чистый лист, назовите его Предупреждение и вставьте на него следующий текст:

Отслеживание входа пользователей в книгу Excel Microsoft Excel, Vba, Макрос, Полезное, Контроль, На заметку, Длиннопост, Системное администрирование

Суть в том, чтобы по умолчанию скрыть в книге все листы кроме этого, а рабочие листы с данными отображать с помощью специального макроса. Если пользователь не разрешил выполнение макросов, то он увидит в книге только один лист с предупреждением. Если же макросы разрешены, то наш макрос обработки события открытия книги скроет лист с предупреждением и отобразит листы с данными. Чтобы пользователь сам не отобразил их — используем суперскрытие вместо обычного скрытия листов (параметр xlSheetVeryHidden вместо обычного False).

Чтобы реализовать все описанное, слегка изменим наши процедуры в модуле ЭтаКнига (ThisWorkbook)

Private Sub Workbook_BeforeClose(Cancel As Boolean)

‘ищем последнюю занятую строчку в логах

lastrow = Worksheets(«Лог»).Range(«A60000»).End(xlUp).Row

‘заносим дату-время выхода из файла

If lastrow > 1 Then Worksheets(«Лог»).Cells(lastrow, 3) = Now

‘скрываем все листы, кроме листа ПРЕДУПРЕЖДЕНИЕ

Worksheets(«Предупреждение»).Visible = True

For Each sh In ActiveWorkbook.Worksheets

If sh.Name = «Предупреждение» Then

sh.Visible = True

Else

sh.Visible = xlSheetVeryHidden

End If

Next sh

‘сохраняемся перед выходом

ActiveWorkbook.Save

End Sub

Private Sub Workbook_Open()

‘ищем последнюю занятую строчку в логах

lastrow = Worksheets(«Лог»).Range(«A60000»).End(xlUp).Row

‘заносим имя пользователя и дату-время входа в файл

Worksheets(«Лог»).Cells(lastrow + 1, 1) = Environ(«USERNAME»)

Worksheets(«Лог»).Cells(lastrow + 1, 2) = Now

‘отображаем все листы

For Each sh In ActiveWorkbook.Worksheets

sh.Visible = True

Next sh

‘скрываем листы ПРЕДУПРЕЖДЕНИЕ и ЛОГ

Worksheets(«Предупреждение»).Visible = xlSheetVeryHidden

Worksheets(«Лог»).Visible = xlSheetVeryHidden

End Sub

Чтобы просмотреть скрытый Лог откройте редактор VisualBasic (Alt+F11), выделите лист на панели Project и измените его видимость на панели Properties, используя свойство Visible:

Отслеживание входа пользователей в книгу Excel Microsoft Excel, Vba, Макрос, Полезное, Контроль, На заметку, Длиннопост, Системное администрирование

Если пользователи настолько продвинутые, что знают про суперскрытые листы и могут их отобразить через редактор Visual Basic или нарушить работу наших макросов, то можно дополнительно поставить пароль на просмотр и изменение макросов. Для этого щелкните правой кнопкой мыши по имени файла в панели Project (строка VBAProject (blackbox.xls)), выберите команду VBA Project Properties и включите флажок Lock project for viewing и задайте пароль на вкладке Protection:

Отслеживание входа пользователей в книгу Excel Microsoft Excel, Vba, Макрос, Полезное, Контроль, На заметку, Длиннопост, Системное администрирование

Теперь точно никто не уйдет безнаказанным.

Интересные поправки в макрос из комментария источника:

Вместо поиска последней занятой строки в таких случаях я обычно вставляю новую строку сразу после «шапки». Все предыдущие строки сдвигаются вниз, конечно. В результате немного упрощается код, сортировка получается обратная, «новые сверху», что позволяет быстрее просматривать последние записи, не прокручивая лист. При открытии — вставляется строка, её номер всегда будет 2. При закрытии файла в строку 2 добавляется время. Переполнение этого стека маловероятно, но и проверку такого переполнения проводить не нужно, просто отрезать строки ниже запланированного количества записей, без проверки.

Private Sub Workbook_Open()

Worksheets(«Реестр изменений»).Rows(«2:2»).Insert Shift:=xlDown ‘вставляем между строками 1 и 2 новую строку

Worksheets(«Реестр изменений»).Rows(«501:501»).Delete Shift:=xlUp ‘удаляем строку 501 (реестр на 500 строк)

Worksheets(«Реестр изменений»).Cells(2, 1) = Environ(«USERNAME») ‘запись в первую ячейку второй строки

Worksheets(«Реестр изменений»).Cells(2, 2) = Now ‘запись во вторую ячейку второй строки

Читайте также:

  • На всех устройствах памяти информация хранится в каком виде ответ
  • Как преобразовать файл в html
  • The bat не работает буфер обмена
  • Не найден или поврежден файл со списком серверов
  • Не работает переходник usb vga

Как узнать сетевого пользователя открывшего файл?

Есть Windows Server 2003 используемый в качестве файлового хранилища в локальной сети. На сервере расшарены папки с файлами. Через команду net file можно узнать какие файлы открыты удаленно, но как узнать кто конкретно открыл/запустил файл и заблокировал его или с какого ip-адреса или машины? Т.к. данная команда выдает таблицу, где все пользователи как Гости. Есть еще команда net session отображающая какие конкретно ip-адресса удаленно открыли файлы и их количество, но не отображает какие именно файлы открыты. То же самое можно увидеть через «Управление компьютером» в разделе «Служебные программы/Общие папки/Открытые файлы(Сеансы)» Есть ли способ или сторонняя программа позволяющая мониторить связку ip-адрес(имя локального компьютера) и открытый файл?

  • Вопрос задан более трёх лет назад
  • 7231 просмотр

Комментировать
Решения вопроса 0
Ответы на вопрос 1

Есть, но не про ваш случай.
В вашем случае ресурс ( принтер, файл, директория ) открывается именно пользователем, которому разрешено (или нет =) работать с ресурсом.
В более современных ОС семейства Windows Server вы можете настроить логирование ( какой пользователь обратился к ресурсу успешно и с какого адреса ), но в 2003, ЕМНИП, такого еще не было.

Ответ написан более трёх лет назад
bahus162 @bahus162 Автор вопроса

Ну логирование это понятно, только не хочется держать и писать постоянно логи, при этом создавая дополнительную нагрузку на жесткий диск и уменьшать быстродействие и так не особо быстрой системы. Хотелось текущую ситуацию просто посмотреть при надобности. И логически должна быть связь между сессиями и открытыми файлами.

Ваш ответ на вопрос

Войдите, чтобы написать ответ

сети

  • Компьютерные сети
  • +2 ещё

Mikrotik hap ac2 скорость порта 500 мбит это нормально для него?

  • 2 подписчика
  • 18 часов назад
  • 154 просмотра

�� Как узнать, кто открыл файл по сети с помощью Python? ��

Чтобы узнать, кто открыл файл по сети в Python, вы можете использовать модуль psutil для мониторинга процессов операционной системы. Вот пример кода:

import psutil # Получить список всех процессов all_processes = psutil.process_iter() # Пройтись по каждому процессу for proc in all_processes: try: # Получить открытые файлы процесса files = proc.open_files() # Проверить, открыт ли нужный файл for file in files: if file.path == 'путь_к_файлу': # Вывести информацию о процессе, который открыл файл print("Процесс с PID", proc.pid, "открыл файл") print("Имя процесса:", proc.name()) break except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess): pass 

Вы должны заменить путь_к_файлу на путь к файлу, информацию о котором вы хотите получить. Если файл открыт, код выведет информацию о процессе, который его открыл.

Детальный ответ

Как узнать, кто открыл файл по сети с помощью Python?

Когда вы работаете с сетевым программированием в Python и вам нужно отслеживать, кто открывает файлы на удаленном компьютере, можно использовать некоторые функции, такие как модуль socket для создания сокета и модуль subprocess для выполнения команд в командной строке. Ниже приведен пример кода, который позволяет вам узнать, кто открыл файл по сети с помощью Python:

 import socket import subprocess def get_remote_file_lock(path): # Получить IP-адрес удаленного компьютера remote_ip = "192.168.0.100" # Замените на IP-адрес удаленного компьютера # Создать сокет и подключиться к удаленному компьютеру s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((remote_ip, 1234)) # Замените 1234 на нужный порт # Выполнить команду в командной строке для получения информации о блокировке файла command = f'lsof ' # Замените на соответствующую команду для вашей операционной системы result = subprocess.check_output(command, shell=True) # Закрыть сокет s.close() # Вернуть результат выполнения команды return result 

В данном примере мы создаем сокет и подключаемся к удаленному компьютеру с помощью его IP-адреса. Затем мы выполняем команду lsof для получения информации о блокировке файла. Эта команда позволяет узнать, какие процессы открыли указанный файл. Для работы с этим кодом вы должны заменить переменную remote_ip на IP-адрес удаленного компьютера, к которому вы хотите подключиться. Также замените переменную command на соответствующую команду для вашей операционной системы. Например, если вы используете Linux, команда будет выглядеть как «lsof «. После выполнения команды вы получите результат, который содержит информацию о процессах, открывающих указанный файл. Это поможет вам определить, кто открыл файл по сети.

Заключение

В этой статье мы рассмотрели, как можно узнать, кто открыл файл по сети с помощью Python. Мы использовали модуль socket для создания сокета и модуль subprocess для выполнения команд в командной строке. Таким образом, мы смогли получить информацию о блокировке файла на удаленном компьютере. Помните, что перед использованием данного кода вам необходимо настроить соответствующие переменные, такие как IP-адрес удаленного компьютера и команду для вашей операционной системы. В зависимости от конкретной ситуации может потребоваться анализировать результаты команды более подробно, чтобы определить, кто конкретно открыл файл.

Как найти и закрыть открытые файлы в сетевой папке на сервере Windows?

date

06.12.2023

user

itpro

directory

PowerShell, Windows 10, Windows 11, Windows Server 2019

comments

комментариев 60

Администратор файлового сервера Windows может вывести список открытых файлов в общей сетевой папке и принудительно закрыть заблокированные файлы, открытые пользователями в монопольном режиме. Если пользователь открыт файл в общей сетевой SMB папке на сервере на чтение и запись и забыл его закрыть (ушел домой, в отпуск), другие пользователи не смогут внести изменения в файл.

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

Вывод списка открытых файлов в сетевой папке Windows

Список открытых по сети файлов в Windows можно получить с помощью графической консоли Computer Management (Управление компьютером).

Открыты файлы на файловом сервере Windows

  1. Откройте консоль compmgmt.msc и перейдите в раздел System Tools ->Shared Folders ->Open files (Служебные программы -> Общие папки -> Открыты файлы);
  2. В правой части окна отображается список открытых файлов. Здесь указаны локальный путь к файлу, имя учетной записи пользователя, количество блокировок и режим, в котором открыт файл (Read или Write+Read).

Также вы можете вывести список открытых на сервере файлов из командной строки:

Openfiles /Query /fo csv

Команда возвращает номер сессии, имя пользователя, количество блокировок и полный путь к файлу.

Openfiles /Query

Cо списком открытых файлов на сервере удобнее работать с помощью PowerShell командлета Get-SmbOpenFile:

В выводе команда содержится имя пользователя, имя (IP адрес) удаленного компьютера, с которого открыт файл), имя файла и ID файловой сессии.

poweshell вывод список пользователей, которые открыли файлы в сетевой папке windows

Кто открыл файл в общей сетевой папке на сервере Windows?

Чтобы удаленно определить пользователя, который открыл (заблокировал) файл cons.adm в сетевой папке на сервере mskfs01, выполните команду:

Openfiles /Query /s mskfs01 /fo csv | find /i «cons.adm»

Ключ /i используется, чтобы выполнялся поиск без учета регистра в имени файла.

Можно указать только часть имени файла. Например, чтобы узнать, кто открыл xlsx файл, в имени которого есть строка farm, воспользуйтесь таким конвейером:

Openfiles /Query /s mskfs01 /fo csv | find /i «farm»| find /i «xlsx»

С помощью PowerShell также можно получить информацию о пользователе, который открыл файл. Например:

Вывести все открытые по сети exe файлы:

Найти открытые файлы по части имени:

Вывести все файлы, открытые определенным пользователем:

Get-SMBOpenFile –ClientUserName «corp\aaivanov» |select ClientComputerName,Path

Найти файлы, которые открыли с указанного компьютера:

Get-SMBOpenFile –ClientComputerName 192.168.12.170| select ClientUserName,Path

Принудительно закрыть открытый файл на сервере Windows

Можно закрыть открытый файл через консоль Computer Management. Найдите файл в списке секции Open Files, выберите в контекстном меню пункт “Close Open File”.

Закрыть открытые файлы в сетевой папке

Если на сервере по сети открыты сотни файлов, то найти нужный файл в графической консоли довольно сложно. Лучше использовать инструменты командной строки.

Закрыть файл можно, указав ID его SMB сессии. Получить ID сессии файла:

Openfiles /Query /fo csv | find /i «report2023.xlsx»

команда openfiles найти кем открыт файл

Теперь можно принудительно отключить пользователя по полученному идентификатору SMB сессии:

Openfiles /Disconnect /ID 3489847304

openfiles disconnect - закрыть открытый файл на сервере

SUCCESS: The connection to the open file "D:\path\REPORT2023.XLSX" has been terminated.

Вы разблокировали открытый файл и теперь его могут открыть другие пользователи.

Можно принудительно сбросить все сессии и освободить все файлы, открытые определённым пользователем:
openfiles /disconnect /s mskfs01 /u corp\aivanova /id *

Можно закрыть открытый файл по ID сессии с помощью PowerShell командлета Close-SmbOpenFile.

Close-SmbOpenFile — SessionId 3489847304

Найти и закрыть открытый файл одной командой:

Get-SmbOpenFile | where | Close-SmbOpenFile

powershell закрыть открытый файл на сервере

Для подтверждения сброса сессии и освобождения отрытого файла нажмите Y -> Enter .

Чтобы закрыть файл без предупреждения, добавьте параметр -Force в последнюю команду.

С помощью Out-GridView можно сделать простую графическую форму для поиска и закрытия файлов. Следующий скрипт выведет список открытых файлов. Администратору нужно с помощью фильтров в таблице Out-GridView найти и выделить нужные файлы, а затем нажать ОК. В результате выбранные файлы будут принудительно закрыты.

Get-SmbOpenFile|select ClientUserName,ClientComputerName,Path,SessionID| Out-GridView -PassThru –title “Select Open Files”|Close-SmbOpenFile -Confirm:$false -Verbose

Get-SmbOpenFile вместе с out-gridview - powershell скрипт с графическим интерефейсом по выбору и принудительному закрыттию заблокированных (открытых) файлов в windows

Принудительное закрытие открытого файла на файловом сервере, вызывает потерю несохраненных пользователем данных. Поэтому команды openfiles /disconnect и Close-SMBOpenFile нужно использовать с осторожностью.

Как удаленно закрыть открытые по сети файлы с помощью PowerShell?

Командлеты Get-SMBOpenFile и Close-SmbOpenFile можно использовать чтобы удаленно найти и закрыть открытые файлы. Сначала нужно подключиться к удаленному SMB серверу Windows через CIM сессию:

$sessn = New-CIMSession –Computername mskfs01

Также вы можете подключаться к удаленному серверам для запуска команд через командлеты PSRemoting: Enter-PSSession или Invoke-Command .

Следующая команда найдет сессию для открытого файла *pubs.docx и завершит ее.

Get-SMBOpenFile -CIMSession $sessn | where | Close-SMBOpenFile -CIMSession $sessn

Подтвердите закрытие файла, нажав Y . В результате вы разблокировали открытый файл. Теперь его могут открыть другие пользователи.

Get-SMBOpenFile - удаленное управление открытых файлов

С помощью PowerShell вы можете закрыть и осведомить на файловом сервере все файлы, открытые определенным пользователем (пользователь ушел домой и не освободил файлы). Например, чтобы сбросить все файловые сессии для пользователя ipivanov, выполните:

Get-SMBOpenFile -CIMSession $sessn | where |Close-SMBOpenFile -CIMSession $sessn

Предыдущая статьяПредыдущая статья Следующая статья Следующая статья

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *