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

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

  • автор:

Управление открытыми файлами на файловом сервере Windows (SMB)

date

27.07.2021

user

itpro

directory

Windows 10, Windows Server 2012 R2, Windows Server 2016

comments

комментария 53

Если вы администрируете общие сетевые папки 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

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

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

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

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

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

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

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

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

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

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

системное-администрирование

  • Системное администрирование
  • +1 ещё

Как «из коробки» прикрутить uefi к wds?

  • 1 подписчик
  • 4 часа назад
  • 10 просмотров

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

В Поисках Истины

Сообщения: 802
Благодарности: 135

Конфигурация компьютера
Процессор: Intel Core 2 Duo E6400 2.13GHz
Материнская плата: EliteGroup P965T-A
Память: Kingston orig PC5300 3Gb (1x2Gb,1x1Gb)
HDD: Seagate Barracuda ST3250823A 250Gb + Seagate Barracuda ST3250620AS 250Gb
Видеокарта: Asus EN GeForce 7600GT 256Mb
Звук: C-Media CMI8738
Блок питания: Powerman (In Win) 430W
CD/DVD: Nec DVD-RW ND-4571A
Монитор: Samsung SyncMaster 2443nw 24`
Ноутбук/нетбук: Asus N61DA
ОС: Windows 8 x64

Здравствуйте. Есть сеть, домене. Где — то расшарена папка, к которой есть полный доступ всем. Сейчас требуется заменить файл, но невозможно — написано что файл открыт кем — то другим. Как можно узнать хоть какую — нибудь информацию об «открывшем» файл?

Сообщения: 26292
Благодарности: 4419

Цитата LilLoco:

Как можно узнать хоть какую — нибудь информацию об «открывшем» файл?

На компьютере, где шара: Пуск -> Выплнить -> fsmgmt.msc

Или сделать это на любом компьютере, а потом пункт меню Действие -> Подключиться к другому.

——-
— Пал Андреич, Вы шпион?
— Видишь ли, Юра.

Сообщение оказалось полезным? Поблагодарите автора, нажав ссылку Полезное сообщение чуть ниже.

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

Сообщений: 6 Регистрация: 11.01.2017

21.01.2018 00:54:35

Привет!
В корпоративной сети в сетевой папке находится файл, в котором находится определенная информация. Файл только для чтения. Необходимо посмотреть кто и когда открывал этот файл, чтобы посмотреть информацию в нем. При открытии файла выходит msgbox с кнопкой ОК. После нажатия ок открывается сам файл. В идеале надо чтобы после нажатия ОК в отдельный файл записывалась информация кто (user name) и когда открывал файл (нажал на Ок в msgbox).
HELP PLEASE. )))

Пользователь

Сообщений: 755 Регистрация: 06.04.2015

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

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