Powershell 停止远程使用文件的进程

Powershell 停止远程使用文件的进程,powershell,Powershell,我有一个脚本,其中一些文件被删除 详细:在目标上执行“删除目录”操作 \名称1 \子项 详细:在目标上执行“删除目录”操作 \名称1 \子项1 详细:在目标上执行“删除目录”操作 \名称1 \子项2 但其他人会在其他详细消息之后抛出此错误: 无法删除项目d:\temp\name1.db\metadata.sqlitedb:进程 无法访问文件“metadata.sqlitedb”,因为它正由使用 另一个过程 无法删除目录d:\temp\name1.db,因为它不是空的 如何自动终止所使用的进程(无

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

详细:在目标上执行“删除目录”操作 \名称1 \子项

详细:在目标上执行“删除目录”操作 \名称1 \子项1

详细:在目标上执行“删除目录”操作 \名称1 \子项2

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

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

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

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

我试图处理这个线程的建议,但我认为我们的服务器不允许使用外部工具,因为我要么没有得到任何输出,要么访问被拒绝……所以我正在寻找一些不需要外部工具的其他选项

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

$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

如果有一个内置的方法来做这件事,为什么会有人推荐handle.exe?@tessellingheckler damn:/如果我只是想杀死相关的进程……我会这样做吗?Stop Process-path$\ Name“metadata.sqlitedb”-force根据我的研究,从本质上讲,获取正在使用的文件的PID的唯一“真正”方法是使用以下工具。要做到这一点,没有“简单”的方法,除非您愿意深入研究Windows NT NTDLL.DLL API的核心和丑陋之处,以获得“纯”脚本解决方案。不幸的是,您不能对
-Path使用
停止进程
,您必须停止sqlite进程。e、 “停止处理sqlite”。您遇到问题的总是sqlite数据库吗?i、 e.您是否有此问题:@Cataster正确。如果有内置的方法,为什么会有人推荐handle.exe?@TessellingEckler damn:/如果我只想杀死关联进程……我会这样做吗?Stop Process-path$\ Name“metadata.sqlitedb”-force根据我的研究,从本质上讲,获取正在使用的文件的PID的唯一“真正”方法是使用以下工具。要做到这一点,没有“简单”的方法,除非您愿意深入研究Windows NT NTDLL.DLL API的核心和丑陋之处,以获得“纯”脚本解决方案。不幸的是,您不能对
-Path使用
停止进程
,您必须停止sqlite进程。e、 “停止处理sqlite”。您遇到问题的总是sqlite数据库吗?i、 e.您是否有此问题:@Cataster正确。