2016-08-25 8 views
0

Я хочу удалить каталог, но процесс его использует.эквивалент фьюзера в Powershell?

mv : Access to the path 'C:\Users\mike\Documents\myapp\node_modules\' is denied. 

Проводник упоминает, что каталог находится в использовании. Есть ли Windows Powershell эквивалент fuser?

Обратите внимание, что это вопрос с полномочиями. Я не хочу запускать графическое приложение.

ответ

1

Попробуйте это:

$lockedFolder="C:\Windows\System32" 
Get-Process | %{$processVar = $_;$_.Modules | %{if($_.FileName -like "$lockedFolder*"){$processVar.Name + " PID:" + $processVar.id}}} 

Это выглядит для каждого процесса, который работает в этой папке. (Или в подкаталогах)

С помощью этого скрипта, вы получите еще несколько информаций:

$lockedFolder="C:\Windows\System32" 
Get-Process | %{$processVar = $_;$_.Modules | %{if($_.FileName -like "$lockedFolder*"){$processVar.Name + " PID:" + $processVar.id + " FullName: " + $_.FileName }}} 

Я думаю, что нет никакого эквивалента фьюзера, но есть инструмент под названием Handle.exe, который должен быть установленный первым.

PowerShell script to check an application that's locking a file?

+0

Спасибо @ Eldo.Ob! Я заметил, что это похоже на работу с полным путем - каким-либо образом заставить его работать с относительным именем папки? – mikemaccana

+0

Добро пожаловать :) Нет, это не полный путь. Скрипт получает все процессы, запущенные в данном каталоге или подкаталогах. Поэтому, если вы установите «D: \» в var $ lockedFolder, вы получите все процессы, запущенные в каталоге D: \ или подкаталогах. Просто попробуйте: '$ lockedFolder =" C: \ Windows \ System32 " Get-Process | % {$ processVar = $ _; $ _. Модули | % {if ($ _. FileName -like "$ lockedFolder *") {$ processVar.Name + "PID:" + $ processVar.id + "FullName:" + $ processVar.FileName}}} ' –

+0

oh Я сделал Ошибка: '$ lockedFolder =" C: \ Windows \ System32 "Get-Process | % {$ processVar = $ _; $ _. Модули | % {if ($ _. FileName -like "$ lockedFolder *") {$ processVar.Name + "PID:" + $ processVar.id + "FullName:" + $ _. FileName}}} ' –

0

Вот модифицированная версия @ Eldo.Ob отличного ответа, который обрабатывает относительные файлы.

function fuser($relativeFile){ 
    $file = Resolve-Path $relativeFile 
    foreach ($Process in (Get-Process)) { 
    foreach ($Module in $Process.Modules) { 
     if ($Module.FileName -like "$file*") { 
     $Process | select id, path 
     } 
    } 
    } 
} 

При использовании:

> fuser .\node_modules\ 

    Id Path 
    -- ---- 
2660 C:\Program Files\nodejs\node.exe