簡體   English   中英

如何提高 3 個連續 GCI -Recurse 調用的性能?

[英]How to improve performance of 3 successive GCI -Recurse calls?

Powershell 菜鳥在這里。 為了創建潛在重復目錄的列表,我有一個循環在所有目錄上運行以下 3 個 GCI 命令,以獲取當前檢查目錄下的總大小、文件數和目錄數:

$folderSize = Get-Childitem -Path $fullPath -Recurse -Force -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum -ErrorAction SilentlyContinue       
$folderDirs = Get-ChildItem -Path $fullPath -Recurse -Force -ErrorAction SilentlyContinue -Directory | Measure-Object -ErrorAction SilentlyContinue       
$folderFiles = Get-ChildItem -Path $fullPath -Recurse -Force -ErrorAction SilentlyContinue -File | Measure-Object -ErrorAction SilentlyContinue       

代碼運行良好,但在同一路徑上使用 recurse 參數運行 3 次 GCI 似乎非常愚蠢。 獲取給定目錄的這 3 個信息的更有效方法是什么?

將 where first 查詢的結果存儲在一個變量中,使用.Where({})擴展方法將它們拆分為基於PSIsContainer屬性的類別 - 此時您可以引用每個的自動Count屬性(而不是調用Measure-Object用於簡單計數項目的對象):

$allFileSystemItems = Get-Childitem -Path $fullPath -Recurse -Force -ErrorAction SilentlyContinue
$size = $allFileSystemItems |Measure-Object Length -Sum

# split collections into "directories" and "files"
$dirs,$files = $allFileSystemItems.Where({$_.PsIscontainer}, 'Split')

$dirCount = $dirs.Count
$fileCount = $files.Count

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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