使用PowerShell,是否可以删除包含文件的某个目录而不提示确认操作?
我有BAT脚本,这些都不是很棘手,在XP上工作正常.但是在Win 7上,在rmdir之后的mkdir中,大约有五分之一的执行给了一个神秘的Access Denied.例如
S:\TLIB importing\! Curtains\2 To process>rmdir temp3allout /s /q
S:\TLIB importing\! Curtains\2 To process>mkdir temp3allout
Access is denied.
Run Code Online (Sandbox Code Playgroud)
在此之后,当我在资源管理器中尝试时,制作该目录没有问题.再次运行thatBAT通常会成功.
知道这里发生了什么吗?
Win XP光盘是一个普通的2Gb驱动器.Win 7光盘是一个2Gb Intel RST RAID1阵列,禁用缓存和刷新http://i.imgur.com/Ohqkg2t.png.
我正在实现自定义PowerShell提供程序.我现在正在处理remove-item cmdlet实现.
RemoveItem方法具有以下签名:
protected override void RemoveItem(string path, bool recurse)
Run Code Online (Sandbox Code Playgroud)
当我输入:Remove-Item .\Myobject -recursePowerShell基础结构为我提供了RemoveItem方法true的recurse参数值.
但是当我输入:Remove-Item.\ MyObject'我得到一个问题:
MyObject中的项目具有子项,未指定Recurse参数.如果继续,所有孩子将被移除该项目.你确定你要继续吗?[Y]是[A]是全部[N]否[L]否全部[S]暂停[?]帮助(默认为"Y"):
我想这个问题是由PowerShell基础设施呈现给我的.这非常好,因为我要删除的对象是一个容器.如果我对上述问题的回答是肯定的,那么PowerShell基础结构不会设置recurse参数.事实上,当RemoveItem调用我的方法时它是错误的.我会除了参数是真的,因为我对问题的回答是肯定的.
我的问题是:
为什么PowerShell没有将bool recurse参数设置为正确的值?
我是否需要以其他方式获得价值(回答问题)?怎么样?
如果以上是不可能的,有没有办法压制这个问题?
使用Remove-Item命令时,即使使用-r和-Force参数,有时也会返回以下错误消息:
Remove-Item:无法删除项目C:\ Test Folder \ Test Folder \ Target:目录不为空。
特别是在Windows资源管理器中打开要删除的目录时,会发生这种情况。
现在,虽然可以通过关闭Windows资源管理器或不浏览该位置来避免这种情况,但是我在多用户环境中工作脚本(在这种环境下,人们有时会忘记关闭Windows资源管理器窗口,但我对删除的解决方案感兴趣)即使在Windows资源管理器中打开了整个文件夹和目录。
有没有比-Force我可以设置的功能更强大的选项了?
为了可靠地重现此内容,请创建文件夹C:\Test Folder\Origin并在其中填充一些文件和子文件夹(重要),然后采用以下脚本或类似的脚本并执行一次。现在打开C:\Test Folder\Target(在我的情况下,我使用C:\Test Folder\Target\Another Subfoldercontains A third file.txt)的子文件夹之一,然后尝试再次运行该脚本。您现在将得到错误。如果您第三次运行该脚本,则不会再次收到该错误(但是,根据我尚未确定的情况,该错误有时会第二次发生,然后再也不会发生,有时又每第二次发生一次)。
$SourcePath = "C:\Test Folder\Origin"
$TargetPath = "C:\Test Folder\Target"
if (Test-Path $TargetPath) {
Remove-Item -r $TargetPath -Force
}
New-Item -ItemType directory -Path $TargetPath
Copy-Item $SourcePath -Destination $TargetPath -Force -Recurse -Container
Run Code Online (Sandbox Code Playgroud)