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
        }
    }

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *