Как посмотреть кто открыл файл
Управление открытыми файлами на файловом сервере Windows (SMB)
Если вы администрируете общие сетевые папки Windows, скорее всего вы периодически сталкиваетесь с просьбами пользователей принудительно закрыть файлы, открытые (заблокированные) в сетевых папках другими пользователями. Обычно это связано с некорректной работой программы, неправильном завершении сессии пользователя или ситуациях, когда пользователь открыл файл и забыл закрыть его (ушел домой, в отпуск и т.д.). Во всех этих случаях файл в сетевой папке оказывается заблокированным, и другие пользователи не могут вносить в него изменения.
В этой статье мы покажем, как получить список открытых файлов на файловом сервере Windows, узнать какие пользователи их используют, и способы сброса файловых сессий для разблокировки открытых файлов.
Вывод списка открытых файлов в сетевой папке Windows
Список открытых по сети файлов в Windows можно получить с помощью стандартной графической консоли Computer Management (Управление компьютером — compmgmt.msc ).
Этот же список открытых файлов можно получит с помощью встроенной консольной утилиты Openfiles. Например, с помощью следующей команды можно получить id сессии, имя пользователя и полный локальный путь к открытому файлу:
Openfiles /Query /fo csv |more
Вы можете вывести список открытых файлов на сервере удаленно. Например, чтобы вывести все открытые по сети файлы на сервере mskfs01, выполните:
Openfiles /Query /s mskfs01 /fo csv
Определяем пользователя, который открыл файл в сетевой папке с помощью Openfiles
Чтобы удаленно определить пользователя, который открыл (заблокировал) файл cons.adm в сетевой папке на сервере mskfs01, выполните команду:
Openfiles /Query /s mskfs01 /fo csv | find /i «cons.adm»
Можно указать только часть имени файла. Например, чтобы узнать, кто открыл xlsx файл, в имени которого есть строка farm, воспользуйтесь таким конвейером:
Openfiles /Query /s mskfs01 /fo csv | find /i «farm»| find /i «xlsx»
Можно, конечно найти открытый файл и в графической консоли Computer Management, но это менее удобно (в консоли нет возможности поиска).
Как принудительно закрыть открытый файл в Windows?
Чтобы закрыть открытый файл, нужно найти его в списке файлов секции Open Files и в контекстном меню выбрать пункт “Close Open File”.
Если на файловом сервере сотни открытых файлов, найти их в консоли будет непросто. Удобнее воспользоваться утилитой Openfiles. Как мы уже говорили, она возвращает ID сессии открытого файла. Вы можете принудительно закрыть файл и сбросить подключение пользователя по ID SMB сессии. Сначала нужно определить ID сессии открытого файла:
Openfiles /Query /s mskfs01 /fo csv | find /i «farm»| find /i «.xlsx»
Теперь можно принудительно отключить пользователя по полученному идентификатору SMB сессии:
Openfiles /Disconnect /s mskfs01 /ID 67109098
Можно принудительно сбросить все сессии и освободить все файлы, открытые определённым пользователем:
openfiles /disconnect /s mskfs01 /u corp\aivanova /id *
Get-SMBOpenFile: вывод списка открытых по сети файлов в PowerShell
В версии PowerShell в Windows Server 2012/Windows 8 появились командлеты для управления сетевыми файлами и папками на SMB сервере. Эти командлеты можно использовать чтобы удаленно закрыть открытые по сети файлы.
Список открытых файлов можно получить с помощью командлета Get-SMBOpenFile. Чтобы закрыть файл (сбросить подключение), используется Close-SmbOpenFile.
Для вывода полного списка открытых файлов на сервере, выполните команду:
Команда возвращает ID файла, ID сессии и полное имя файла.
Можно вывести список открытых файлов с именами пользователей и компьютеров (IP адресами):
Можно вывести все файлы, открытые определенным пользователем:
Get-SMBOpenFile –ClientUserName «corp\aaivanov» |select ClientComputerName,Path
или с определенного компьютера (сервера):
Get-SMBOpenFile –ClientComputerName 192.168.12.170| select ClientUserName,Path
Можно вывести список открытых файлов по шаблону. Например, все открытые по сети exe файлы:
или файлы с определенным именем:
Но обычно удобнее закрыть файл по имени:
С помощью Out-GridView можно сделать простую графическую форму для поиска и закрытия файлов. Следующий скрипт выведет список открытых файлов. Администратор должен с помощью фильтров в таблице Out-GridView найти, выделить нужные файлы и нажать ОК. В результате выбранные файлы будут принудительно закрыты.
Как удаленно закрыть открытые SMB файлы с помощью PowerShell?
Командлеты Get-SMBOpenFile и Close-SmbOpenFile можно использовать чтобы удаленно найти и закрыть открытые файлы. Сначала нужно подключиться к удаленному SMB серверу Windows через CIM сессию:
$sessn = New-CIMSession –Computername mskfs01
Следующая команда найдет SMB сессию для открытого файла *pubs.docx и завершит ее.
С помощью PowerShell вы можете закрыть и разблокировать на файловом сервере все файлы, открытые определенным пользователем (пользователь ушел домой и не освободил файлы). Например, чтобы сбросить все файловые сессии для пользователя ipivanov, выполните:
Спасибо, поправил ошибку! Лишний символ.
Спасибо, полезный материал!
А как сделать наоборот? Отобразить список папок с открытым доступом для конкретного пользователя?
У Sysinternals есть утилитка AccessChk. Думаю с помощью нее проще всего получить список результирующих прав на каталоги для конкретного пользователя.
На вход подаем имя пользователя и имя папки. Запускаем на сервере. В результате получаем список обьектов и результирующие права доступа (R/Rw …).
accesschk corp\vasyauser d:\share
Попробуйте.
Добрый день. В чём может быт проблема в случае, когда файл принудительно закрытый через консоль не закрывается на удаленном сервере?
Кто-то использует этот файл. Возможно локально. Либо сразу после закрытия открывает… Идентфикатор сесии тот-же?
Файл точно не открывается, поскольку после закрытия через консоль не закрывается на удаленном сервере, проверил, подключившись под другим пользователем и открыв файл на сервере.
Я что-то запутался… Опишите проблему точнее, какой-то сумбур получился 🙂
Да, запутанно написал, извините. Файл находится на сервере A (файловый сервер), я захожу на сервер Б с правами пользователя и открывают файл лежащий на сервере А. Затем захожу на сервер А с правами администратора и закрываю файл открытый с правами обычного пользователя с сервера Б, используя консоль. Но файл не закрывается.
Михаил
А что за файл? Какая-то специфическая программа? Или обычный офисный документ?
Проверьте идентификатор сессии открытого файла. Он меняется, когда вы его отключали через консоль?
Да, идентификатор меняется. Ещё есть нюанс, должен ли файл закрываться у пользователя как приложение? Поскольку я не вижу новой сессии, до тех пора пользователь не произведет манипуляций с файлом. Например, сохранит документ. Т.е. я закрываю через консоль файл, он не закрывается у пользователя, но исчезает сессия в консоли. Пользователь пересохраняет открытый файл тем самым открывая новую сессию.
Тут все верно. Путь к файлу остался в приложении. Когда приложение сохраняет файл (через то же автосохранение), создается новая SMB сессия к файлу.
В вашем случае надо после отключения файла нужно пристрелить приложение на удаленном компьютере.
Скорее всего никак. У выполняющего команду должны быть права администратора роли File Server. Либо как вариант сделать задание в планировщике, которое запускается автоматом или по требованию и сохраняет в текстовый список открытых файлов. Нужным пользователям можно дать права на текстовый файл или запуск задания.
Здравствуйте. Есть шара на сервере и пользователи часто обращаются узнать кто открыл определенный файл на шаре. Как и чем сделать так чтобы юзер сам мог посмотреть кем открыт файл?
Без предоставления прав админа на сервере не знаю как это сделать.
Как вариант — поднять на этом же сервере IIS из одной страницы, которую формирует планировщик запуская раз в 5 минут команду выгрузки списка текущих открытых файлов в html.
Хотя бы так:
del /q c:\inetpub\site1\index.html
Openfiles /Query >> c:\inetpub\site1\index.html
Пользователи, если хотят понят кем открыт их любымый отчет, просто открывают этот сайт, ищут в списке свой файл и определяют злодей, который держит файл открытым на RW.
Вот прям процессы убиваются на компьютерах, где эти исполняемый файлы запушены с сетевой папке? Мне почему-то кажется, что так не получится.
По логике, если exe запустилось, она уже будет работать в памяти на компьютере, где запушено. Если ему понадобится обратится к exe файлу на шаре, он к нему сходит.
Может проще шару временно отключить на время обновления?
Здравствуйте, проясните такой вопрос: на файловом сервере 2012R2, пользователи работаю с файлами dwg(через AutoCAD). User1открывает файл с сервера и начинает в нем работать, если в это время User2 откроет этот файл то получит уведомление что файл можно открыть только для чтения. Но бывают случаи когда User2 открывает файл в котором точно работает User1 но не получает уведомления и получает права на редактирование файла. Чаще такое наблюдается когда User1 отходит на некоторое время от компьютера, обострилась ситуация когда натравили GPO «Включение заставки через 600с».
Доброго дня коллеги, подскажите как реализовать задачу?Как правильно настроить доступ доменному пользователю что бы он мог подключиться через PS и закрыть файлы?
Я бы посмотрел в сторону powershell just enough administration (правильный путь) или некого задания в планировщике, которое берет инфу о файлах, которые нужно закрыть из текстового файла (задания запускается из-под админа)
В общем, дочитал комментарии и увидел ответ.
Get-SmbOpenFile | where
Спасибо за статью. А кто-нибудь сталкивался с таким?
Пользователь работает с документами (pdf, word, excel) на сетевом диске (файловый сервер), закрывает их, а другой пытается удалить/перенести файл или папку (в которой были эти документы) и не может, т.к «этот файл открыт в другой программе» и т.д. При этом, на файловом сервере, я по открытым файлам общих папок вижу, что первый пользователь продолжает держать папку, в которой он работал с документами. Иногда помогает перезагрузка ПК (первого пользователя), а иногда папка сама себя отпускает. Я пытался разобраться с самим ПК пользователя, в частности с офисным софтом и самой Windows, но у меня много пользователей и у всех так или иначе возникает проблема с «заблокированными» папками. Может ли так быть, что групповая политика, что подключает диски файлового сервера пользователю, каким-то образом не давать отпускать папки, с которым он работал? Или есть какая-то настройка сброса сессии к папкам? Даже не знаю…
Нужно искать процесс на компьютере пользователя, которые держит открытой сетевую папку. Может быть это антивирус или какой-то сканер, а может и офисное по работает некорректно.
Спасибо за статью. А как посмотреть, кто открыл файлы на терминальном сервере?
(файловый сервер, с переходом на удаленку становится мало актуальным.. даже странно, что кто-то сейчас открывает файлы не в терминальной сесии )
Остался вопрос. Как выдать отдельному человеку права, чтобы он мог подключиться через mmc консоль и закрыть чужую сессию. И чтобы больше ничего сделать не мог.
Подскажите, пожалуйста, куда можно покопать, что и чем помониторить при такой проблеме, которая возникла после перехода на Windows 2012R2:
1. С одного компьютера запускается приложение, которое открывает ряд файлов на шаре.
2. На другом компьютере при копировании файлов с этой шары, копирование резко замедляется на открытых файлах. Ждет на открытом файле может несколько минут, потом копирование идет дальше быстро, но когда попадает на следующий открытый файл, опять неимоверная задержка. Ошибки нет, просто копирование может затянуться на 30 минут, например. Пробовал на Windows 7, Windows 10 и даже Windows 2003. Везде этот эффект одинаковый.
Если на первом компьютере приложение не запущено, т.е. файлы не открыты, то копирование идет быстро, как обычно.
Проблема решилась (по крайней мере файлы копируются быстро в тех условиях, при которых раньше копировались долго) тем что обновили Windows 7 (клиента) с Wsus и установкой пакета «удобств». Windows 7 c первоначальной установки с какого-то дистрибутива не обновлялась.
Доброго! Помогите, пожалуйста.
С Win8.1 пытаюсь сделать запрос открытых файлов на Win2012
Openfiles /Query /s 192.168.0.20 /U «RSRV\user3» /P /fo csv | find /i «Eng.mdb»
Ввожу пароль.
Ошибка: Отказано в доступе.
user3 — админ на двух хостах, пароли одинаковые.
user3 на хосте 192.168.0.20 может открывать шары с Win8.1.
На хосте 192.168.0.20 журнал SMBserver пустой.
В журнале Безопасности, Аудит успеха: 4672 Специальный вход, 4624 Вход в систему, 4634 Выход из системы.
Уже даже не знаю, какой журнал посмотреть, чтобы определить причину отказа.
Как вариант попробовать: в запросе не указывать имя. Windows 2012 и так поймет, какое имя пользователя и сравнит со своим именем. А если указано имя (c компьютером rsrv), то оно, поди, ищет такого пользователя у себя, естественно его нет (так как компьютер другой).
Пользователь одинаковый на двух хостах, с одинаковыми паролями. Пробовал без указания пользователя, без указания сервера, с указанием имени или ипа сервера. Пробовал под другим админом, которого нет на сервере. Пробовал с другого Вин2012 сервера. Всегда один и тот же ответ: «Ошибка: Отказано в доступе.»
И как это проанализировать, через какой журнал, совершенно не понятно….
Как посмотреть, кто и чем занимался на компьютере в мое отсутствие: определяем последние действия «чужака».
Не подскажите, можно ли как-то посмотреть, кто и чем занимался на компьютере в мое отсутствие? И, если можно, как-нибудь бы защитить ПК от таких не званных гостей.
Вообще, для 100%-надежной защиты вашего ПК — он должен быть всегда при вас (тогда никто не сможет отформатировать диск, и посмотреть ваши данные).
Собственно, теперь об основном вашем вопросе: где и какую историю хранит Windows и как это посмотреть.
Не мешай! Всё уже и так записано на диске. (Евгений Кран, сайт: http://cartoon.kulichki.com/)
Как посмотреть последние действия: история работы
👉 Совет 1: анализируем журнал событий
В Windows есть спец. журналы, куда заноситься очень многое: когда включался и выключался компьютер, коды шибок, предупреждения и т.д. Нас же, разумеется, интересует время вкл./выкл. 😉
Чтобы открыть журнал : нажмите Win+R —> откроется окно «Выполнить» —> в него введите команду eventvwr.
После должно появиться окно событий — в нем нужно выбрать вкладку «Журналы Windows / Система» и открыть фильтр текущего журнала. Далее выбрать дату, установить галочку «Сведения» и нажать OK (см. мой пример ниже 👇).
Смотрим историю вкл. ПК за последние сутки
Теперь внимательно смотрим список событий: если вы их отфильтровали — список не будет большим. В первую очередь нас интересуют события «Power. « — в моем примере ниже (👇) показано, что кто-то вывел мой ПК в 7:59 по Москве.
Могли ли вы в это время использовать компьютер
Собственно, время, когда работал ПК мы уже знаем.
👉 Совет 2: смотрим документы и файлы, с которыми недавно работали
По умолчанию Windows помнит обо всех документах и файлах, которые вы недавно открывали (это делается с целью ускорения открытия файлов, с которыми часто работаете).
Чтобы посмотреть этот список (недавних документов*) — нажмите Win+R, и используйте команду shell:recent.
Далее у вас откроется системный каталог, в котором вы сможете отсортировать по дате изменения все файлы — ну и сравнить, с вашими рабочими часами за ПК (а заодно и узнаете, какими документами интересовались «гости» 😉).
Недавние документы отсортированные по дате
Ну и не могу не отметить, что если вы откроете свойства файла — то во вкладке «Подробно» проводник вам сможет подсказать даты доступа, печати и изменения документа.
Как посмотреть недавно открытые файлы в ОС Windows 10 (никак не могу найти вчерашний документ. )
👉 Совет 3: анализируем историю посещений в браузере
Кстати, в Chrome можно также перейти на страничку: chrome://history/
Ctrl+H — открыть историю
После, в журнале указываете нужную дату и уточняете какие сайты просматривались. 👌 (Кстати, многие пользуются соц. сетями — а значит можно будет быстро узнать кто заходил на свой профиль!).
1) Как посмотреть историю посещения сайтов, даже если она удалена
2) Как очистить историю посещения сайтов, чтобы нельзя было восстановить! Удаление всего кэша браузеров
👉 Совет 4: проверяем свой профиль Google
Кстати, если незваный «гость» на ПК пользовался сервисами Google — то вероятно вы сможете узнать, например, что он искал в поисковой системе (еще один «плюсик» к пакету информации 😉). Благо, что по умолчанию Google всю эту информацию собирает и «откладывает».
Профиль Google (браузер Chrome)
Далее «проматываете» до нужной даты и смотрите, какие поисковые запросы были сделаны. 👌
👉 Совет 5: просматриваем корзину, каталог загрузок
Папку «загрузки» можно открыть, нажав на Win+R, и использовав в меню «Выполнить» команду: shell:downloads.
Чтобы открыть корзину (даже если ее значка нигде нет): нажмите Win+R, и используйте команду Shell:RecycleBinFolder.
👉 Совет 6: как поймать с поличным «тайного работника» за вашим ПК
На мой взгляд, самый простой способ это сделать — воспользоваться спец. программами для контроля сотрудников (например, Clever Control ). Примечание : таких программ много, я просто привел одну из них.
Установка у Clever Control простая и интуитивно понятная, в процессе работы она будет незаметно фиксировать всё в спец. журнал (в т.ч. и делать снимки с веб-камеры, запоминать работающие программы, и т.д., в зависимости от ваших настроек).
Clever Control — одна из программ для контроля сотрудников (узнали, кто сидел за ПК!)
Т.е. о том, что вы ее установили к себе на ПК, и что она работает — никто не узнает, а просматривать что творится за вашей системой вы сможете в любое удобное для вас время (даже не находясь возле нее ( прим. : с другого компьютера)).
Таким образом вы сможете узнать кто и что делает за вашим ПК, причем так, что «виновник» даже не узнает о том, что он «попался». 😉