【问题标题】:Permission errors in PowerShellPowerShell 中的权限错误
【发布时间】:2011-10-12 10:22:23
【问题描述】:

我是 PowerShell 新手。当尝试编写一个简单的脚本来删除文件夹的内容,然后用从不同文件夹复制的文件填充它时,我总是收到PermissionDenied 错误。

详情:

+ remove-item <<<<  D:\path\* -recurse
    + CategoryInfo : PermissionDenied: (save.gif:FileInfo) [Remove-Item], IOException
    + FullyQualifiedErrorId : RemoveFileSystemItemUnAuthorizedAccess,Microsoft.PowerShell.Commands.RemoveItemCommand

问题出在哪里?我能够通过资源管理器操作这两个文件夹。 从脚本文件和 shell(使用 Windows PowerShell ISE)运行时都会出现该错误。 ISE 进程在我的帐户下运行。 我正在运行 Windows 7 Professional 并且是本地管理员。

编辑: 在理查德的建议下,我尝试了详细模式(似乎没有效果)。

PS Z:\> $error[0] | fl * -force

PSMessageDetails      : 
Exception             : System.IO.IOException: Not Enough permission to perform operation.
TargetObject          : D:\path\file.txt
CategoryInfo          : PermissionDenied: (D:\path\file.txt:FileInfo) [Remove-Item], IOException
FullyQualifiedErrorId : RemoveFileSystemItemUnAuthorizedAccess,Microsoft.PowerShell.Commands.RemoveItemCommand
ErrorDetails          : Cannot remove item D:\path\file.txt: Not Enough permission to perform operation.
InvocationInfo        : System.Management.Automation.InvocationInfo
PipelineIterationInfo : {0, 1}

我没有看到任何有用的东西(但无论如何感谢您的提示)。

编辑 2: 好的,下面是脚本来源:

remove-item D:\path_A\* -recurse
copy-item D:\path_B\* D:\path_A\

就是这样。 remove-item 似乎会扔到每个文件中。

【问题讨论】:

  • 您是否真的有权删除错误中记录的文件 save.giffile.txt
  • 是的,当控制台不工作时,我做的第一件事就是尝试手动删除它们。 (我在开场白中也说过,但也许我有点含糊。对此感到抱歉。)
  • 能否提供脚本本身?
  • 是否启用了 UAC?如果是这样,请尝试以“管理员”身份运行 PowerShell 会话。看起来您确实没有删除对象的权限。您可以发布目录的 ACL 吗?
  • 使用-Exclude 开关遇到了一个有趣的问题,导致同样的访问被拒绝问题。为了解决问题,我将其重写为管道 Get-Item | Where-对象。归根结底,-Exclude 是个古怪的人……

标签: powershell


【解决方案1】:

你试过了吗:

remove-item D:\path_A\* -recurse -force

【讨论】:

  • +1 因为(误导性地)即使具有适当的访问权限,如果 只读文件 存在于被删除的目录中,则会引发 PermissionDenied 错误,除非指定了 Force。
  • +1。感谢 JPBlanc 的回答,感谢@piers7 的澄清
  • 删除项目 C:\path\some.js -recurse -force ;给我访问路径被拒绝,以管理员身份运行
【解决方案2】:

是否启用了 UAC?如果是这样,请尝试以“管理员”身份运行 PowerShell 会话。看起来您确实没有删除对象的权限。

我工作的地方有非常严格的安全政策,不熟悉 UAC 的用户总是被烧毁。

【讨论】:

    【解决方案3】:

    除了上述帖子中提到的原因之外,我还观察到,当文件被单独的进程访问时,会引发“访问被拒绝”错误(在我的情况下,我必须在重命名项目之前停止服务器可以成功运行)。

    【讨论】:

      【解决方案4】:

      在此错误之后(并假设此时是最近的错误):

      $error[0] | fl * -force
      

      将展开错误和异常的详细信息。这应该会给你更多的信息。

      另一件事是打开详细日志记录

      $VerbosePreference = "Continue"
      

      详细了解发生错误时正在执行的具体操作。

      最后,PowerShell ISE 包含一个调试器,可让您逐步执行脚本。

      【讨论】:

        猜你喜欢
        • 2020-10-26
        • 1970-01-01
        • 1970-01-01
        • 2012-09-26
        • 2015-04-01
        • 2014-03-08
        • 2012-05-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多