null

Поиск открытых файлов при помощи PowerShell и их принудительное закрытие

 

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

PS C:\Users\Admin> openfiles

INFO: The system global flag 'maintain objects list' needs
      to be enabled to see local opened files.
      See Openfiles /? for more information.


Files opened remotely via local share points:
---------------------------------------------

ID       Accessed By          Type       Open File (Path\executable)
======== ==================== ========== =====================================
26172487 User1              Windows    I:\..\Docs_folder\Cash
53695795 User5              Windows    I:\..\Общие документы
20133795 User9              Windows    I:\Shares\
17449789 ServerS01$     Windows    E:\..4010879645-2962178822-1782.vhdx
39596482 User7              Windows    I:\Shares\
67110092 User2              Windows    I:\Shares\
 

 

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

Для отключения конкретного пользователя нужно использовать параметр  /Disconnect :

PS C:\Users\Admin> openfiles /id 31541167 /disconnect

Начиная с Win 8/2012 появился стандартный модуль SMBShare. С помощью команд Get-SMBOpenFile и Close-SmbOpenFile можно выполнить аналогичные действия:

PS C:\Users\Admin> Get-SMBOpenFile

Результатом выполнения команды станут следующие поля: FileId, SessionId, Path,  ShareRelativePath, ClientComputerName, ClientUserName.

Закрываем файл:

PS C:\Users\Admin> Close-SmbOpenFile -FileId 4415226383589

С использованием  модуля SMBShare можно фильтровать результаты для облегчения работы, например, нам нужно получить только открытые файлы с расширением .doc:

PS C:\Users\Admin> Get-SmbOpenFile | Where-Object -Property ShareRelativePath -Match ".doc"

 Аналогично будет выглядеть работа с остальными полями, например можно задать конкретное расположение файла, имя, или же имя пользователя\компьютера.

 

Источники:

https://technet.microsoft.com/itpro/powershell/windows/smbshare/get-smbopenfile

 

 

Коротко о себе:

Работаю инженером в компании Tune IT.

Ничего не найдено. n is 0