[英]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.