有没有人知道为什么Remove-Item
会失败,而Delete
工作?
在下面的脚本中,我得到了一个我想删除的文件列表。
使用Remove-Item
,我得到以下错误消息:
VERBOSE:在目标“\UncPath\Folder\test.rtf”上执行操作“Remove File”。Remove-Item:无法删除项目\UncPath\Folder\test.rtf:拒绝访问该路径。
但是使用Delete
正在删除这些文件。
脚本
$files = gci \\UncPath\Folder| ?{ $_.LastWriteTime -le (Get-Date).addDays(-28) }
# This doesn't work
$files | Remove-Item -force -verbose
# But this does
$files | % { $_.Delete() }
2条答案
按热度按时间nuypyhwy1#
powershell可能会对UNC路径表现得很奇怪,我认为它会在UNC路径前加上当前提供程序,您可以使用它来验证:
返回TRUE
返回FALSE
当指定fullpath我们告诉powershell使用filesystem provider,这解决了问题.你也可以指定像
remove-item filesystem::\\uncpath\folder
这样的providerrslzwgfq2#
我终于可以重现这个,在我看来这是一个错误。重现是有一个像C$这样的开放共享,但要为文件上的用户设置拒绝修改perms。当我这样做时,我观察到:
我还观察到,删除
-Force
参数也会删除文件而不会出错。拒绝perms仍然允许我从Windows资源管理器中删除文件,因此我认为应该删除文件。那么使用-Force
参数是怎么回事?当我深入研究ErrorRecord时,我看到了这样的情况:似乎
-Force
参数正在尝试设置(更可能是 reset)属性,但文件的权限不允许这样做,例如:所以在我看来,PowerShell应该首先尝试,就好像
-Force
不存在,如果失败,然后尝试重置属性。