首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Remove-Item错误:无法删除项目[item path & name]:对路径'[item path & name]‘的访问被拒绝

Remove-Item错误:无法删除项目[item path & name]:对路径'[item path & name]‘的访问被拒绝
EN

Stack Overflow用户
提问于 2014-04-08 22:17:23
回答 3查看 18.9K关注 0票数 4

我是PowerShell的新手。

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

将文件从源服务器复制到目标服务器的过程正常,没有出现问题。但是,当脚本继续从源服务器删除组件时,我会断断续续地遇到错误:" remove -Item error: Cannot remove item path & name:访问路径'item path & name‘被拒绝。“

我已经多次运行这个脚本;有时它完成时没有任何问题,有时出现错误。并不是每个要删除的文件都会出现该错误,而且每次出现时似乎都会出现在不同的组件上。

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

代码语言:javascript
运行
复制
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...")
        }
    }
 }

将-force参数与Remove-Item cmdlet一起使用似乎对此问题没有任何影响。这些文件(同样,每次失败都是不同的文件)看起来并不是isReadOnly。

同样,以管理员身份运行PowerShell似乎没有任何效果,尽管源文件夹的Get-Acl指示管理员应该具有FullControl权限。

这是我遗漏的权限问题吗?任何建议都非常感谢……

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

代码语言:javascript
运行
复制
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...")
        }
    }
}

这似乎可以工作,尽管我仍然不确定为什么这种安排应该产生不同的结果。为了学习的兴趣,任何见解都将不胜感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-08 22:28:05

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

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

票数 6
EN

Stack Overflow用户

发布于 2014-11-26 20:41:47

我修复了这个问题,方法是为用户设置安全权限,为我试图从中删除的文件夹添加“修改”和“完全控制”

票数 1
EN

Stack Overflow用户

发布于 2021-04-02 23:55:38

我在计划任务中运行PowerShell时遇到了这个问题。我做了几件事,它在最后一件上起作用了:

  1. 为用户提供了对文件夹中文件的完全控制权限。

  1. 让我的小组成为校长

a)例如,新调度的任务主体-GroupId "BUILTIN\Administrators“-RunLevel最高

  1. Set任务以使用最高Privileges

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22939800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档