簡體   English   中英

如果Remove-Item失敗,請退出PowerShell

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM