[英]Exit PowerShell if Remove-Item fails
我有这样的命令
dir "D:\BA1\xml-data\build-dir" -Directory | Where LastAccessTime -lt (Get-Date).AddDays(-22) | Remove-Item -Recurse
删除旧文件夹。 而且大部分时间都有效。 但有时这些文件夹包含隐藏文件和此作业日志。 “您没有足够的访问权限来执行此操作。” < - 这是有意的。
我不知道的是:
如果该命令无法删除至少一个项目,如何使整个作业失败(将错误代码设置为1并退出)。
您自己的答案有问题,因为它在第一个错误时退出,其中:
相反,最好让Remove-Item
完成处理所有目录,只留下不可移除的目录,并确定之后是否发生错误:
# Let the command run to completion and collect errors in $removalErrors.
dir "D:\BA1\xml-data\build-dir" -Directory |
Where LastAccessTime -lt (Get-Date).AddDays(-22) |
Remove-Item -Recurse -ErrorVariable removalErrors
# Exit with -1, if at least 1 error occurred, and with 0 otherwise.
exit (0, -1)[$removalErrors.Count -gt 0]
-ErrorVariable removalErrors
使用-ErrorVariable
通用参数来收集变量$removalErrors
遇到的Remove-Item
所有非终止错误。 注意如何在没有 $
参数的情况下传递变量的名称。
这样做的$removalErrors
好处是,您可以检查$removalErrors
以消除与发生的特定路径有关的特定错误。
当然在发布问题后,答案就在了。
要解决我的问题,我需要使用add -ErrorAction Stop标志并用try catch包装它
try{
dir "D:\BA1\xml-data\build-dir" -Directory | Where LastAccessTime -lt (Get-Date).AddDays(-22) | Remove-Item -Recurse -ErrorAction Stop
}
catch
{
exit -1
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.