Powershell. Поиск пользователя открывшего файл на шаре.
Периодически возникает необходимость найти кто из пользователей занял файл на сетевой шаре. Это можно выяснить зайдя на файловый сервер и посмотрев список открытых файлов. Но это занимает достаточно много времени, т.к. поиска по списку нет, а количество открытых файлов очень велико. И тут на помощь приходит Powershell.
Для просмотра списка открытых файлов существует командлет «Get-SMBOpenFile»
По умолчанию командлет выдаст список открытых файлов вашего компьютера, для получения списка с сервера необходимо создать сессию на этот сервер и запустить командлет в этой сессии.
$sess = New-CIMSession –Computername %Имя или адрес вашего сервера%
Теперь мы готовы получить список открытых файлов с файлового сервера:
$sess = New-CIMSession –Computername %Имя или адрес вашего сервера%
$files = Get-SMBOpenFile -CimSession $sess
Отлично, теперь нужно найти наш файл и имя пользователя:
foreach ($file in $files)
{
if ($file.path -like "*имя_файла*")
{
$file | select path, ClientUserName | fl
}
}
Тут мы берем список и проверяем каждый элемент на соответствие с нашим искомым файлом. Если быть точным, мы берем путь каждого открытого файла и ищем в пути имя искомого файла или, например, часть пути. «*» в конструкции «$file.path -like «*имя_файла*» подразумевают любое количество, любых символов.
И полный текст скрипта:
$sess = New-CIMSession –Computername %Имя или адрес вашего сервера%
$files = Get-SMBOpenFile -CimSession $sess
foreach ($file in $files)
{
if ($file.path -like "*имя_файла*")
{
$file | select path, ClientUserName | fl
}
}