Powershell

尋找篩選舊文件的最快方法

  • December 16, 2013

我們有多個文件伺服器,我在其中工作,其中包含 TB 級和 TB 級的文件。我們目前沒有用於歸檔/刪除過時數據的系統。我的任務是創建一個腳本來移動/刪除超過 3 年的文件。將文件移到一邊,只是“獲取”文件是一個問題。到目前為止使用 Powershell。

我遇到了文件名/路徑長於 ~248 個字元的文件,Powershell 似乎無法處理。我還研究了 Robocopy,但 Robocopy 無法訪問 LastAccessTime 文件屬性。加上Powershell似乎真的很慢。這是我一直在測試的程式碼:

Get-ChildItem "\\path" -Force -Recurse | 
       where {!($_.PSIsContainer) -and ($_.LastAccessTime -lt (Get-Date).AddYears(-3))} | 
       select Mode,LastAccessTime,Length,Name

我的問題是:在某些路徑超過 248 個字元的情況下,是否有一種更快、更有效的方法來遞歸地“獲取”數 TB 的文件(包括 LastAccessTime 屬性)?

主要尋找免費的解決方案,但如果有一些好的付費解決方案,我願意檢查出來。

如果您使用的是 Win2k8 或更新版本,則可以使用文件伺服器資源管理器創建文件過期任務,該任務會將舊文件移動x到不同的目錄。

程式碼範例會很慢,因為您在應用過濾器之前遞歸地列舉每個文件和目錄。這不是 PowerShell 的錯,.Net 中的底層文件系統類實際上非常快。

您想使用內置過濾器參數而不是管道到 where-object(通常,盡可能“向左”進行過濾。)

引用自:https://serverfault.com/questions/557506