我有一个脚本,其中一些文件被删除了...
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