Как в PowerShell узнать, какой процесс или программа блокируют файл

Если вы предпочитаете графический интерфейс, то смотрите «Как узнать, какой процесс блокирует файл или папку в Windows».

В данной статье будет показано, как с помощью 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

Данные о процессах открывших файл будут содержать следующие поля:

  • ID
  • Имя процесса
  • Открыть файл (<Путь>\<исполнимый файл>)

Если вы используете скрипт, то вы можете добавить дополнительную проверку, чтобы уменьшить риск непредсказуемого поведения, если файл или директория не существуют:

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

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

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

wp-puzzle.com logo