Сетевой файл заблокирован некорректно отображается кем

Обновлено: 04.07.2024

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

Handle.exe, Process Explorer и PsFile, по-видимому, ограничены файлами на локальной машине, поэтому они не работают для меня.

На всякий случай кто-то ищет решение для системы на базе Windows или NAS:

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

Там вы можете даже сильно закрыть файл.

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

Управление доступом и хранением

Диспетчер серверов > Роли > Файловые службы > Управление общим хранилищем и хранилищем > щелкните правой кнопкой мыши на SaSM > Управление файлом Open

Через OpenFiles

CMD > Openfiles.exe/query/s SERVERNAME

PsFile работает на удаленных компьютерах. Если моя учетная запись уже имеет доступ к удаленному общему ресурсу, я могу просто ввести:

Это довольно сложно, так как в моем случае этот удаленный общий ресурс монтируется как Z: на моем локальном компьютере, но psfile идентифицирует пути, как они определены на удаленном файловом сервере, что в моем случае я: (ваш будет будь другим). Мне просто пришлось расчесывать результаты моего первого запуска psfile, чтобы увидеть некоторые из путей, которые он вернул, а затем запустить снова с частичным путем, чтобы сузить результаты.

Опционально PsFile позволит вам указать учетные данные для удаленного доступа, если вам нужно предоставить их для доступа.

Наконец, небольшой совет: если кто-то нажимает на файл в Проводнике Windows и разрезает или копирует файл с намерением вставить его в другое место, это действие также блокирует файл.

Это может быть особенно полезно при использовании общей базы данных MS Access.

Частичный ответ: с помощью Process Explorer вы можете просматривать дескрипторы сетевого ресурса , открытого с вашего компьютера.

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

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

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

  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

27.07.2021

directory

Windows 10, Windows Server 2012 R2, Windows Server 2016

comments

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

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


А при открытие файла разве не пишет?


А при открытие файла разве не пишет?
Stormy

Место для рекламы.

Вопрос не в открытии, а в сохранении и закрытии. К примеру я сижу в файле и хочу сохраниться, а кто-то зашёл в этот же файл как "чтение", то он меня блокирует. Вот и хочется выяснить, как отследить блокирующего Вопрос не в открытии, а в сохранении и закрытии. К примеру я сижу в файле и хочу сохраниться, а кто-то зашёл в этот же файл как "чтение", то он меня блокирует. Вот и хочется выяснить, как отследить блокирующего alekZZandr Этот момент можно отследить, но не инструментами excel а оснасткой администрирования на самом сервере:
Панель управления -> Администрирование -> Управление компьютером -> Общие папки -> Открытые файлы. Там не только видно, кто блокирует указанный файл, но так же можно принудительно файл разблокировать (последние изменения указанного пользователя сохранены не будут, если не была нажата кнопка сохранения)
P.S. Написано применительно к Windows Этот момент можно отследить, но не инструментами excel а оснасткой администрирования на самом сервере:
Панель управления -> Администрирование -> Управление компьютером -> Общие папки -> Открытые файлы. Там не только видно, кто блокирует указанный файл, но так же можно принудительно файл разблокировать (последние изменения указанного пользователя сохранены не будут, если не была нажата кнопка сохранения)
P.S. Написано применительно к Windows igrtsk

Инструктор по применению лосей в кавалерийских частях РККА

Да, Windows. Но, к сожалению у меня нет доступа к администрированию общих папок серверного диска. Есть ли способ обойти администрирование? Ведь если я сижу в файле, то я должен где-то в файле видеть кто со мной сидит в нём? Да, Windows. Но, к сожалению у меня нет доступа к администрированию общих папок серверного диска. Есть ли способ обойти администрирование? Ведь если я сижу в файле, то я должен где-то в файле видеть кто со мной сидит в нём? alekZZandr Если у вас нет прав администрирования - никак.
Тормошите админов. Пусть "поднимают" сервер, обеспечивающий корректную работу в общих файлах.
Тем более, что такой пакет входит в состав MS Office начиная с версии 2007, в противном случае дадут вам терминальный доступ к требуемому ресурсу Если у вас нет прав администрирования - никак.
Тормошите админов. Пусть "поднимают" сервер, обеспечивающий корректную работу в общих файлах.
Тем более, что такой пакет входит в состав MS Office начиная с версии 2007, в противном случае дадут вам терминальный доступ к требуемому ресурсу igrtsk

Инструктор по применению лосей в кавалерийских частях РККА

alekZZandr,
А разве пользователь открывший в режиме Чтения или Уведомления, может блокировать сохранение?
Пользователь А открывает файл первым
Пользователь Б вторым
Пользователь А редактирует файл и преспокойно его сохраняет
Пользователь Б в случае режима Чтение даже и не подозревает о закрытие файла, в случае режима Уведомление, получает уведомление.

Я в чем-то ошибся?

alekZZandr,
А разве пользователь открывший в режиме Чтения или Уведомления, может блокировать сохранение?
Пользователь А открывает файл первым
Пользователь Б вторым
Пользователь А редактирует файл и преспокойно его сохраняет
Пользователь Б в случае режима Чтение даже и не подозревает о закрытие файла, в случае режима Уведомление, получает уведомление.

Я в чем-то ошибся? Stormy

Я в чем-то ошибся? Автор - Stormy
Дата добавления - 28.02.2014 в 16:53

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