停止远程使用文件的过程

时间:2019-04-05 16:10:11

标签: powershell

我有一个脚本,其中一些文件被删除了...

  

VERBOSE:对目标执行“删除目录”操作   \ name1 \ subitem

     

VERBOSE:对目标执行“删除目录”操作   \ name1 \ subitem1

     

VERBOSE:对目标执行“删除目录”操作   \ name1 \ subitem2

但是其他人在其他详细消息之后抛出此错误:

  

无法删除项目d:\ temp \ name1.db \ metadata.sqlitedb:进程   无法访问文件“ metadata.sqlitedb”,因为它正在被文件使用   另一个过程。

     

目录d:\ temp \ name1.db无法删除,因为它不是空的。

我如何自动终止所使用的进程(无论是哪个进程),并尝试再次删除该项,作为上面脚本的一部分?

我尝试了处理来自该线程PowerShell script to check an application that's locking a file?的建议,但是我认为我们的服务器不允许使用外部工具,因为我没有得到任何输出或拒绝了访问...所以我正在寻找不需要外部的其他选项工具

本质上是在我的脚本中寻找类似的内容:

$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

0 个答案:

没有答案