Иногда требуется получить список файлов, открытых пользователями в данный момент.
Для этого можно использовать команду 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