Как в PowerShell узнать, какой процесс или программа блокируют файл
В данной статье будет показано, как с помощью PowerShell найти процесс, который блокирует файл или папку.
Команда OPENFILES позволяет администратору вывести список открытых файлов и папок, которые были открыты в системе.
OPENFILES / []
/Disconnect Отключение одного и более открытых файлов. /Query Отображение открытых файлов, локально и с сетевого ресурса. /Local Включает/отключает отображение локально открытых файлов. /? Вывод справки.
Для использования программы OPENFILES должен быть включён флаг «построение списка объектов».
Для его включения выполните команду:
openfiles /local on
Обратите внимание, что после выполнения данной команды, чтобы изменения вступили в силу, необходимо перезагрузить компьютер.
После этих подготовительных действий, мы наконец можем узнать в PowerShell, какой процесс заблокировал файл (папку) от удаления и переименования. Следующий команды можно выполнить построчно или использовать в скрипте. Замените «C:\Windows\SoftwareDistribution» на папку или файл, которые вас интересуют:
$FileOrFolderPath = "C:\Windows\SoftwareDistribution" $LockingProcess = CMD /C "openfiles /query /fo table | find /I ""$FileOrFolderPath""" Write-Host $LockingProcess
Данные о процессах открывших файл будут содержать следующие поля:
Если вы используете скрипт, то вы можете добавить дополнительную проверку, чтобы уменьшить риск непредсказуемого поведения, если файл или директория не существуют:
$FileOrFolderPath = "C:\Windows\SoftwareDistribution" IF((Test-Path -Path $FileOrFolderPath) -eq $false) < Write-Warning "Файл или директория не существуют." >Else < $LockingProcess = CMD /C "openfiles /query /fo table | find /I ""$FileOrFolderPath""" Write-Host $LockingProcess >
Связанные статьи:
- Как узнать, какой процесс блокирует файл или папку в Windows (96.4%)
- Диспетчер задач Windows: полное руководство (68.2%)
- Как включить удалённый рабочий стол RDP в Windows Server 2019 (53.7%)
- Как управлять службами в Windows (53.7%)
- Как переименовать файл или папку в PowerShell (53.7%)
- Как установить разные обои для виртуальных рабочих столов Windows 10 (RANDOM — 50%)
Как определить, какой процесс в Windows 10 не дает переименовать, переместить либо удалить файл или папку
Н аверное, каждому из пользователей Windows хотя бы раз приходилось иметь дело с так называемыми неудаляемыми файлами и папками. Как правило, причиной невозможности удалить, переместить или хотя бы переименовать такой объект является использование его каким-то процессом, причём необязательно чтобы этот процесс был системным. Это может быть антивирус, архиватор или какой-нибудь редактор.
Обычно в окне с ошибкой прямо указывается, что за процесс препятствует дальнейшим действиям с объектом, но бывает и так, что вместо этого сообщается, что файл или папка открыты в другой программе. Это понятно, но вот в какой именно?
Так вот, определить её очень просто. Во всех популярных версиях Windows (начиная с 7) есть такая встроенная утилита как «Монитор ресурсов», предназначающаяся для контроля использования программных и аппаратных ресурсов. В её поле зрения попадают все процессы, в том числе и зависшие. Она то как раз и подскажет, что именно держит файл или папку.
Нажмите сочетание клавиш Win + R и выполните в открывшемся окошке команду resmon .
Откроется окно монитора ресурсов. Переключитесь в нём на вкладку «ЦП» и введите в поле «Поиск дескрипторов» название объекта, при удалении, перемещении или переименовании которого возникла ошибка. Результаты отобразятся тут же, чуть ниже. В нашем примере удалению папки «Всякая всячина» препятствовал архиватор WinRAR , но в самом окне с описанием ошибки об этом ничего не говорилось.
Вот так всё просто. Кстати, если удерживающий процесс не является критическим, его можно завершить прямо из окна монитора ресурсов.
После этого проблемный файл, папка или другой объект легко смогут быть удалены обычным способом.
Как узнать, какой процесс блокирует файл или папку в Windows
Как я могу узнать, какой процесс блокирует файл или папку в Windows? Например, при попытке удалить папку Windows сообщает следующее:
Операция не может быть завершена, так как эти папка или файл открыты в другой программе. Закройте папку или файл и повторите попытку.
Такая же ошибка может возникнуть при переименовании или удаления как папки, так и файла. Но как узнать, какая программа или приложение в настоящее время использует его и не позволяет удалить файл или папку?
Имеется сразу несколько способов и программ чтобы найти процессы и программы, которые открыли файл.
1. Монитор ресурсов
Для поиска программы или процесса, открывшей файл, вы можете использовать Монитор ресурсов (Resource Monitor), который встроен в Windows 7, 8 и 10.
Откройте Монитор ресурсов, это можно сделать несколькими способами:
- В поле для поиска введите «Монитор ресурсов» или resmon.exe:
- Или в Диспетчере задач перейдите на вкладку «Производительность» и найдите кнопку «Открыть монитор ресурсов»:
В Мониторе ресурсов перейдите на вкладку ЦП (CPU). Используйте поле поиска в разделе «Связанные дескрипторы»
В результатах поиска в столбце «Образ» вы увидите, какая программа запустила процесс, блокирующий файл.
Здесь же вы можете кликнуть правой кнопкой мыши по любому найденному процессу и нажать «Завершить процесс», чтобы закрыть программу, блокирующую файл.
2. Process Explorer
Process Explorer — это официальная программа от Microsoft/SysInternals, которую можно скачать по ссылке: https://download.sysinternals.com/files/ProcessExplorer.zip
Перейдите в Find → Handle or DLL.
В текстовом поле «Handle or DLL substring:» введите путь до файла или папки. Будут показаны все процессы, которые имеют открытый обработчик на этот файл.
3. OpenedFilesView
OpenedFilesView это бесплатная программа не требующая установки, она покажет все открытые файлы, имеется возможность искать по имени или пути файла:
4. LockHunter
LockHunter — это надёжная программа для разблокировки файлов.
Это бесплатный инструмент для удаления файлов, заблокированных неизвестным процессом. LockHunter полезен для борьбы с вредоносными программами и другими программами, которые блокируют файлы без причины. В отличие от других подобных инструментов, он удаляет файлы в корзину, поэтому вы можете восстановить их, если удалили по ошибке.
- Показывает процессы, блокирующие файл или папку
- Предоставляет вам подробную информацию о процессе
- Позволяет разблокировать, удалить, скопировать или переименовать заблокированный файл
- Может удалить файл при следующей перезагрузке ОС
- Позволяет убить процесс блокировки
- Позволяет удалить процессы блокировки с жёсткого диска
- Может выгружать DLL из процессов
- Интегрируется в меню Проводника
- Он удаляет файлы в корзину, поэтому вы можете восстановить их, если удалили по ошибке
- Поддерживает как 32, так и 64 битную Windows
При подготовке материала использовались источники:
Как в PowerShell узнать, какой процесс или программа блокируют файл
Как узнать, какой процесс блокирует файл или папку в Windows