用powershell命令删除文件时报错。


PowerShell交流中心分类: 文件和注册表用powershell命令删除文件时报错。
0
xbin530 asked 10 年 ago

将D\windows下的“Exchange – 副本”这个文件夹权限更改为没有权限访问,在使用remove-item命令删除Windows文件夹时出现报错,并且d:\windows文件夹中的其它文件都没有被删除,已在命令中添加了-erroraction为continue,尝试很多次都没有生效,求高手指教,在下感激不尽!!! 
删除文件夹命令如下:
Remove-Item D:\Windows -Recurse -Force -ErrorAction:Continue
报错信息如下:
Remove-Item : Access to the path ‘D:\Windows\Exchange – 副本’ is denied.
所在位置 行:1 字符: 1
+ Remove-Item D:\Windows -Recurse -Force -ErrorAction:Continue
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (D:\Windows:String) [Remove-Item], UnauthorizedAccessException
    + FullyQualifiedErrorId : RemoveItemUnauthorizedAccessError,Microsoft.PowerShell.Commands.RemoveItemCommand

1 Answers
1
Best Answer
Mooser Lee 管理员 answered 10 年 ago

这是肯定的,你把它的所有的权限都删除了,你怎么还会有权限删除它呢?
此时在文件上鼠标右键->属性->安全 ->编辑 把自己(当前用户)给加进去,再删除应当就可以了。
那可能还会问,能不能用PowerShell添加这个权限,因为时间关系,我就不写了。
可以参考:PowerShell文件系统(五)管理访问权限

xbin530 replied 10 年 ago

实在不好意思,还是要再请教您一下。因为这是在模仿实际环境,因为文件放在公档上,有部分用户会对文件夹权限做类似更改,只有其自己或特定人员能访问。还有,既然我已经添加了erroraction,为什么没有跳过这个报错继续去删除其它文件呢?麻烦您了……

Mooser Lee 管理员 replied 10 年 ago

明白了,remove-item是一条完整命令,如果出错了指定的ErrorAction只能影响到下一条命令是否执行,而不是remove-item本身

Mooser Lee 管理员 replied 10 年 ago

所以你可能得多写几行代码区处理了。声明堆栈stack,递归遍历,遇到文件夹压入堆栈,遇到文件直接删除,没有子项栈顶元素出栈,递归处理,直到堆栈为空。

xbin530 replied 10 年 ago

多谢指教,现在明白我的问题出在哪了。感激!!!