Как улучшить производительность 3 последовательных вызовов GCI -Recurse? - PullRequest
0 голосов
/ 16 марта 2020

Пауэршелл нуб здесь. Чтобы создать список потенциальных дубликатов каталогов, у меня есть al oop, который запускает следующие 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       

Код работает нормально, но кажется глупым запускать 3 раза GCI с параметром recurse в одном и том же пути. Что может быть более эффективным способом получить эти 3 информации для данного каталога?

1 Ответ

1 голос
/ 16 марта 2020

Сохраните результаты первого запроса where в переменной, используйте метод расширения .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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...