抱歉,這可能是一個愚蠢的問題:兩者之間有什么區別
Remove-Item -recurse -Force -Verbose 和 Remove-Item -Force -Verbose
看來如果我們用-recursepowershell為一個檔案夾和子檔案夾一一洗掉檔案夾里面的檔案。如果我們洗掉-recursepowershell,只需洗掉主檔案夾而不檢查檔案夾內部。從技術上講,沒有腳本會運行得更快-recurse嗎?
uj5u.com熱心網友回復:
當您Remove-Item在包含檔案的目錄樹上使用時……不要使用-Recurse,您將收到標準確認提示。因此,使用該引數可以使其運行時不會出現“您真的要這樣做嗎?”的延遲。迅速的。
這是一些人寧愿管道輸出的原因之一Get-ChildItem -Recurse到Remove-Item。
uj5u.com熱心網友回復:
tl;博士
通過既 -Recurse 和 -Force到Remove-Item 以(更多)可預測地洗掉(洗掉)一個給定的檔案夾,其中-禁止任何許可,并定時問題-洗掉的檔案夾和內容的任何其可具有。
警告:這會立即洗掉目標檔案夾中的任何內容,并且鑒于已洗掉的專案未放置在作業系統的回收站中,因此只能使用專業軟體進行恢復。
看來如果我們用
-recursepowershell為一個檔案夾和子檔案夾一一洗掉檔案夾里面的檔案。
更準確地說,它洗掉目標檔案夾的子樹,即在洗掉目標檔案夾本身之前,它遞回地洗掉位于目標檔案夾中的所有檔案和子檔案夾,包括它們的檔案和子檔案夾。實際上,它會洗掉目標檔案夾及其所有內容(如果有),但請注意以下警告:
- 重新“受保護”的專案,這額外需要
-Force,下面討論。 - 由于檔案系統 API在較舊的 Windows 版本中異步而導致的間歇性故障,在底部部分進行了討論。
事實上,在洗掉檔案夾本身之前洗掉檔案夾的所有內容是洗掉非空檔案夾的唯一方法,從技術上講:檔案系統 API不提供將非空檔案夾作為單個操作的洗掉。
因為無意中洗掉整個子檔案夾樹可能會產生災難性的后果,作為一種安全機制PowerShell 要求您明確表示洗掉非空檔案夾的意圖- 通過傳遞-Recurse.
- 如果您忽略 pass
-Recurse并且目標檔案夾非空,您將收到互動式確認提示- 無論是否-Force指定。選擇[A] Yes to All(typea) 以洗掉檔案夾及其所有內容 - 但請參閱-Force下面的情況附加需求。
這就是說,你就還需要-Force以(更多)不出所料洗掉一個非空的目標檔案夾,因為-Force品牌PowerShell還洗掉“受保護”檔案和檔案夾,這是隱藏的檔案和檔案夾有檔案ReadOnly和/或System屬性集(上視窗)。
如果您
-Force在使用-Recurse或互動選擇時忽略通過[A] Yes to All以回應確認提示,則至少有一個受保護專案的存在將阻止整個目標檔案夾的洗掉,盡管子樹中未受保護的專案將立即被洗掉。每個受保護的專案都會導致發出一個非終止錯誤,并以目標檔案夾不能被洗掉的非終止錯誤結束,因為它不是空的(還)。也許令人困惑的是,在Windows PowerShell 中,每個受保護專案的錯誤訊息只涉及“[in]足夠的訪問權限”,即使在這種情況下真正的問題不是權限之一;_PowerShell (Core) 7 中的錯誤訊息已被修改,以明確提及隱藏、系統和只讀專案。
如果我們洗掉
-recursepowershell,只需洗掉主檔案夾而不檢查檔案夾內部。
否:從上面可以看出,除非您先洗掉其內容,否則您無法洗掉給定的非空檔案夾。
如果你在沒有 的情況下嘗試-Recurse,你總是會得到確認提示(或者,在非互動式場景中,呼叫將徹底失敗)。
從技術上講,沒有腳本會運行得更快
-recurse嗎?
從上面也可以看出,只有一個空檔案夾才能被洗掉,而 -Recurse不會觸發確認提示。
如果不同時指定-Recurse目標的空檔案夾時,假設子項是否存在測驗的不必要的作業可以進行。實際上,無論您是否通過,Remove-Item的實作始終執行此測驗-Recurse。
即使同時指定了-Recurse和-Force,整體洗掉也可能失敗:
...由于當前用戶相對于目標檔案夾及其內容持有的檔案系統權限不足。
...間歇性地,由于運行在早于 Windows 10 20H2 的Windows 版本上(我不知道對應的Windows Server版本),因為檔案系統項洗掉本質上是異步的(!),導致間歇性失敗完全洗掉給定的目標檔案夾,即如果在嘗試洗掉檔案夾本身時尚未完成洗掉檔案夾內的專案:有關詳細資訊和解決方法,請參閱此答案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/366192.html
標籤:电源外壳
