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

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

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

Просмотр открытых файлов на Windows Server

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

  1. Запустите программу compmgmt.msc консоль и перейдите к Системные инструменты -> Общие папки -> Открытые файлы;
  2. В правой части окна отображается список открытых файлов. Каждая запись показывает локальный путь к файлу, имя учетной записи пользователя, количество блокировок и режим, в котором открыт файл (Читать или Писать+читать).Список открытых файлов в общих папках Windows Server 2012 R2Список открытых файлов в общих папках Windows Server 2012 R2

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

openfiles /Query /fo csv

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

Openfiles cli инструмент для управления открытыми файламиOpenfiles cli инструмент для управления открытыми файлами

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

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

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

powershell: список открытых файлов smb с именами пользователейpowershell: список открытых файлов smb с именами пользователей

Как узнать, кто заблокировал открытый файл в Windows

При попытке открыть заблокированный файл пользователь увидит предупреждение.

The document filename is locked for editing by another user. To open a read-only copy of his document, click…

Чтобы удаленно определить пользователя, заблокировавшего файл name.docx файл в общей папке на сервере lon-fs01, выполните команду

openfiles /query /s lon-fs01 /fo csv | find /i "name.docx"

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

Можно указать только часть имени файла. Например, чтобы узнать, кто открывал файл .XLSX, содержащий строку отчет_о_продаже в своем имени, используйте следующую трубку:

openfiles /Query /s lon-fs01 /fo csv | find /i "sale_report"| find /i "xlsx"

Чтобы получить информацию о пользователе, открывшем файл, можно также использовать PowerShell.

Список всех EXE-файлов, открытых из общей папки:

Get-SmbOpenFile | Where-Object {$_.Path -Like "*.exe*"}

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

Get-SmbOpenFile | Where-Object {$_.Path -Like "*reports*"}

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

Get-SMBOpenFile –ClientUserName "corp\mjenny"|select ClientComputerName,Path

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

Get-SMBOpenFile –ClientComputerName 192.168.1.190| select ClientUserName,Path

Закрытие открытых файлов на Windows Server

Чтобы закрыть открытый файл, можно воспользоваться консолью управления компьютером. Найдите файл в списке в разделе «Открытые файлы» и выберите ‘Закрыть открытый файл’ из меню.

закрытие открытого файла с помощью графического интерфейса консоли управления компьютеромзакрыть открытый файл с помощью графического интерфейса консоли управления компьютером

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

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

Openfiles /Query /fo csv | find /i "report2023.xlsx"

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

openfiles /disconnect /ID 3489847304

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

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

openfiles /disconnect /s lon-fs01/u corp\mjenny /id *

Вы можете использовать команду PowerShell Close-SmbOpenFile закрыть обработчик открытого файла по идентификатору сеанса.

Close-SmbOpenFile -FileId 4123426323239

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

Get-SmbOpenFile | where {$_.Path –like "*annual2020.xlsx"} | Close-SmbOpenFile -Force

Чтобы подтвердить сброс сеанса и освободить открытый файл, нажмите Y -> Enter.

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

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

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

сценарий powershell gui для закрытия открытых файлов с помощью out-gridviewpowershell gui скрипт для закрытия открытых файлов с помощью out-gridview

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

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

The Get-SMBOpenFile и Close-SmbOpenFileКоманды можно использовать для удаленного поиска и закрытия открытых (заблокированных) файлов. Первым шагом будет создание сеанса CIM с удаленным файловым сервером Windows:

$sessn = New-CIMSession –Computername lon-fs01

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

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

Get-SMBOpenFile -CIMSession $sessn | where {$_.Path –like "*pubs.docx"} | Close-SMBOpenFile -CIMSession $sessn

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

PowerShell Get-SMBOpenFile - Close-SMBOpenFilePowerShell Get-SMBOpenFile - Close-SMBOpenFile

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

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

Инструмент Process Explorer можно использовать для закрытия локальных обработчиков открытых файлов в Windows.

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

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