Powershell – закрываем открытые файлы


Периодически наблюдаю проблему: на терминальном сервере пользователь открывает файлы на сетевой шаре, далее закрываем сессию пользователя, проблема – некоторые файлы остаются в статусе открытых и заблокированных на файловом сервере.

Через какой-то достаточно длительный таймаут файлы конечно будут закрыты, но если пользователя или пользователей «выгоняли», потому что требовалось заменить эти файлы (например, модули программы), то нужно как можно быстрее разблокировать файлы. Сделать это можно принудительно удалив открытые коннекты к файлам.

Способ 1. Классический.

Используем (даже удалённо) стандартную утилиту openfiles.

#Ищем, например, заблокированный файл на сервере SERVER:
Openfiles /Query /S SERVER /FO CSV | find "prog.dll"
#Из найденных строк берём ID файла и удаляем подключение:
Openfiles /Disconnect /S SERVER /ID 1234567890
#Теперь можно заменить файл на новую версию.

Способ 2. Новый

Начиная с Windows 8/2012, в Powershell появился стандартный модуль SMBShare, который имеет командлеты с функциональностью аналогичной openfiles:

Get-SMBOpenFile – выполняет вывод открытых файлов, позволяет использовать некоторые встроенные фильтры.

Close-SmbOpenFile – позволяет закрыть подключение к файлу.

#Создаём удаленное подключение:
$s = New-CIMSession –Computername SERVER
#Ищем, например, заблокированный файл на сервере SERVER:
Get-SMBOpenFile -CIMSession $s | where {$_.Path –like "*prog.dll"}
# Закрываем его
Close-SMBOpenFile -CIMSession $s -FileId 1234567890
# или в одну строку
Get-SMBOpenFile -CIMSession $s | where {$_.Path –like "*prog.dll"} | Close-SMBOpenFile -CIMSession $s

Способ 3. Новый WMI.

Всё аналогично второму способу: начиная с Windows 8/2012, в SMB 3.0 появился WMI класс MSFT_SmbOpenFile – именно на его основе работают новые командлеты Get-SMBOpenFile и Close-SmbOpenFile. Если вы хотите, то можете использовать WMI напрямую:

# Получить список открытых файлов
gwmi -Namespace "root/microsoft/windows/smb" -Class MSFT_SMBOpenFile

Да и вообще зачем всё так усложнять? 
Перезагрузите файловый сервер - и все дела... :-)
Реклама

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

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: