Остановите процесс, использующий файл удаленно - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть скрипт, в котором некоторые файлы удаляются ...

VERBOSE: Выполнение операции «Удалить каталог» на цели \ Name1 \ подпозиция

VERBOSE: Выполнение операции «Удалить каталог» на цели \ Name1 \ subitem1

VERBOSE: Выполнение операции «Удалить каталог» на цели \ Name1 \ subitem2

но другие выдают эту ошибку после других подробных сообщений:

Невозможно удалить элемент d: \ temp \ name1.db \ metadata.sqlitedb: процесс не может получить доступ к файлу metadata.sqlitedb, потому что он используется другой процесс.

Каталог d: \ temp \ name1.db не может быть удален, поскольку он не пустой.

Как я могу автоматически убить используемый процесс (какой бы он ни был) и попытаться снова удалить элемент, как часть моего сценария выше?

Я попытался обработать предложение из этой темы. Сценарий PowerShell, чтобы проверить приложение, блокирующее файл? , но я думаю, что наши серверы не поддерживают внешние инструменты, поскольку я либо не получаю никаких выходных данных, либо отказываю в доступе ... . Так что я ищу другой вариант, который не требует внешнего инструмента

По сути, ищу что-то подобное в моем сценарии:

$Directory = "d:\temp"
Invoke-Command -Computer $Server -ScriptBlock { 
    param ($dir, $name)

#Write-Output "dir='$dir', name='$name'"

$f = Get-ChildItem -Path $dir | Where {$_.Name -Match $name} | Select -ExpandProperty FullName
if ($f) {
    $f | Foreach {
                try
            {
                Remove-Item $_ -confirm:$false -recurse -Verbose #-WhatIf
            }
            catch
            {
                if ($_.Exception.Message -like '*it is being used by another process*')
                { write-host "that process is " $pid + $pname
                    try{
                        KILL PROCESS
                        Remove-Item $_ -confirm:$false -recurse -Verbose #-WhatIf
                    }
                    catch
                    {
                        $error[0]
                    }

                }
                else
                {
                    Write-Host "$($error[0])`r`n" -foregroundcolor magenta -backgroundcolor black
                }
            }
    }
}
else {
    Write-Verbose "No file found"
}
} -ArgumentList $Directory, $DB -verbose
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...