删除项目错误:无法删除项目[项目路径和名称]:拒绝访问路径'[项目路径和名称]'被拒绝

The*_*ear 3 powershell powershell-ise powershell-2.0

我是PowerShell的新手.

我正在尝试自动将dll组件从源服务器上的文件夹部署到目标服务器上的多个文件夹.这看起来应该很简单:将组件从源服务器上的源(部署)文件夹复制到目标服务器上的文件夹,验证副本,最后从源服务器上的部署文件夹中删除组件.

将文件从源服务器复制到目标服务器的工作没有问题.但是,当脚本继续从源服务器删除组件时,我间歇性地遇到错误:"删除项目错误:无法删除项目[项目路径和名称]:访问路径'[项目路径&名字''被拒绝."

我已多次运行此脚本; 有时它完成没有问题,有时会出错.每个要删除的文件都不会发生错误,并且每次出现时都会出现在不同的组件上.

下面是我为删除组件和验证删除而编写的函数:

function DeleteSourceFiles($srcPath) {
    # Announce delete
    OutputToHostAndLog ("Files will be removed from "+$srcPath+"...")
    OutputToHostAndLog "Removing files..."

    # Deletes all file items (i.e. all except folders) in source folder
    $filesToDelete=Get-ChildItem $srcPath | Where-Object {$_ -is [IO.FileInfo]}
    ForEach($item in $filesToDelete) {
        Remove-Item $srcPath\$item -force

        # Verify deletions       
        if(Test-Path($srcPath+"\"+$item)) {
            OutputToHostAndLog ("Delete failed: "+$item.Name)        
            $fail++
        }
        else {
            OutputToHostAndLog ($item.Name+" deleted successfully...")
        }
    }
 }
Run Code Online (Sandbox Code Playgroud)

将-force参数与Remove-Item cmdlet一起使用似乎不会对此问题产生任何影响.无论如何,文件(同样,每次失败的不同文件)似乎都不是isReadOnly.

同样,以管理员身份运行PowerShell似乎没有任何效果,尽管源文件夹的Get-Acl表明Administrator应具有FullControl.

这是我缺少的权限问题吗?任何建议非常感谢...

编辑:我更新了我的脚本:

function DeleteSourceFiles($srcPath) {
    # Announce delete
    OutputToHostAndLog ("Files will be removed from "+$srcPath+"...")
    OutputToHostAndLog "Removing files..."
    OutputToHostAndLog $gap

    # Delete all file items (i.e. all except folders) in source folder
    $filesToDelete=Get-ChildItem $srcPath | Where-Object {$_ -is [IO.FileInfo]} | ForEach {
        Remove-Item $_.FullName -Force

        # Verify deletions
        if(Test-Path($srcPath+"\"+$_)) {
            OutputToHostAndLog ("Delete failed: "+$_.Name)        
            $fail++
        }
        else {
            OutputToHostAndLog ($_.Name+" deleted successfully...")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这似乎工作正常,虽然我仍然不确定为什么这种安排会产生不同的结果.为了学习,任何见解都将受到高度赞赏......

Jas*_*gan 6

间歇性访问被拒绝错误可能表示您尝试删除的一个或多个文件已被另一个应用程序锁定.当您尝试清理日志目录时,这是一个非常常见的问题.

我建议做的唯一事情是等待带锁的应用程序释放文件.