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

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

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

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

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

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

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

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

Openfiles /Query /fo csv

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

Openfiles /Query

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

Get-SmbOpenFile|select ClientUserName,ClientComputerName,Path,SessionID

В выводе команда содержится имя пользователя, имя (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 | Where-Object {$_.Path -Like "*.exe*"}

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

Get-SmbOpenFile | Where-Object {$_.Path -Like "*защита*"}

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

Get-SMBOpenFile –ClientUserName "corpaaivanov"  |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:pathREPORT2023.XLSX" has been terminated.

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

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

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

Close-SmbOpenFile - SessionId 3489847304

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

Get-SmbOpenFile | where {$_.Path –like "*report2023.xlsx"} | 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 {$_.Path –like "*pubs.docx"} | Close-SMBOpenFile -CIMSession $sessn

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

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

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

Get-SMBOpenFile -CIMSession $sessn | where {$_.ClientUserName –like "*ipivanov*"}|Close-SMBOpenFile -CIMSession $sessn

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