
Администратор файлового сервера Windows может вывести список файлов, открытых в общей папке, и принудительно закрыть заблокированные файлы. Если пользователь открывает файл в общей SMB-папке на файловом сервере для записи и забывает закрыть его, это означает, что другие пользователи не смогут изменить этот файл.
В этой статье мы рассмотрим, как получить список файлов, открытых на файловом сервере Windows, пользователей, которые их используют, и как сбросить сеансы работы с файлами, чтобы разблокировать открытые файлы.
Просмотр открытых файлов на Windows Server
Вы можете использовать графический Управление компьютером оснастка для получения списка файлов, открытых по сети в Windows
- Запустите программу
compmgmt.msc
консоль и перейдите к Системные инструменты -> Общие папки -> Открытые файлы; - В правой части окна отображается список открытых файлов. Каждая запись показывает локальный путь к файлу, имя учетной записи пользователя, количество блокировок и режим, в котором открыт файл (Читать или Писать+читать).
Список открытых на сервере файлов можно также получить из командной строки:
openfiles /Query /fo csv
Команда возвращает номер сессии, имя пользователя, количество блокировок и полный локальный путь к файлу.
Более удобным способом работы со списком открытых на сервере файлов является использование команды Get-SmbOpenFile PowerShell:
Get-SmbOpenFile|select ClientUserName,ClientComputerName,Path,SessionID
Вывод команды включает имя пользователя, имя (IP-адрес) удаленного компьютера, с которого был открыт файл, имя файла и идентификатор 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
openfiles /disconnect
и Close-SMBOpenFile
команды следует использовать с осторожностью.Как удаленно закрыть открытые файлы с помощью PowerShell
The Get-SMBOpenFile
и Close-SmbOpenFile
Команды можно использовать для удаленного поиска и закрытия открытых (заблокированных) файлов. Первым шагом будет создание сеанса CIM с удаленным файловым сервером Windows:
$sessn = New-CIMSession –Computername lon-fs01
Следующая команда находит и закрывает сессию для открытого файла pubs.docx.
Get-SMBOpenFile -CIMSession $sessn | where {$_.Path –like "*pubs.docx"} | Close-SMBOpenFile -CIMSession $sessn
Подтвердите закрытие файла, нажав Y
. Это разблокирует открытый файл, и другие пользователи смогут его открыть.
С помощью PowerShell можно закрыть сеансы SMB и разблокировать все файлы, открытые определенным пользователем (например, если пользователь ушел домой и не освободил открытые файлы). Следующая команда сбрасывает все файловые сеансы пользователя mjenny:
Get-SMBOpenFile -CIMSession $sessn | where {$_.ClientUserName –like "*mjenny*"}|Close-SMBOpenFile -CIMSession $sessn