У меня есть то, что я предполагаю простым вопросом. У меня есть большой блок кода, который я написал. Короче говоря, он загружает динамический список имен файлов и расширений, импортирует csv с корнями каждого из наших разделов и сравнивает файлы для поиска совпадений.Powershell GCI Рекурсивная глубина останавливается при добавлении параметра включения
$Directory = Get-ChildItem -Path $path -Recurse -Depth 2 -Include $ExtList -Force
Супер простой, не так ли? Кроме того, что параметр глубины не работает. Он рекурсивно просматривает каждый уровень. Если я это сделаю:
$Directory = Get-ChildItem -Path $path -Depth 2 -Force
Параметр Depth работает отлично, и он выполняет поиск только на двух уровнях. Если я не включаю рекурсию или глубину, она работает, как ожидается, путем поиска только верхнего уровня. Единственное отличие заключается в том, что я удаляю параметр -Include.
$ Path является переменной, как \ сервер \ корень \ $ ExtList массив имен файлов
Опять же, они оба работают по отдельности, но не вместе.
Мне нужно иметь как глубину, так и включать параметры здесь. Кто-нибудь знает, что я делаю неправильно, или если это сбой?
Редактировать ---------------------------
Doing "Where-Object" Я попытался это:
$Directory = Get-ChildItem -Path $path -Recurse -Depth 2 -Force | Where-Object {$_.Extension -like $ExtList}
И ... ничего не происходит. Для тестирования этот скрипт занимает около 10 минут, чтобы успешно работать в хороший день, и завершился менее чем за 1 секунду. (715ms, если быть точным) Когда я вхожу в отладку, это похоже на то, что в объект-объект ничего не передается.
EDIT ------
Установка $ ExtList выглядит следующим образом:
@((Invoke-WebRequest -Uri "https://fsrm.experiant.ca/api/v1/get").content | convertfrom-json | % {$_.filters})
Это поможет вам точный список и формат, который я использую.
$ Путь тянет из CSV-файла, который выглядит следующим образом:
Этот CSV имеет более 3000 различных акций в нем. Я знаю, что это странно, да, я должен сделать это так для нашей инфраструктуры.
Можете ли вы попробовать подключиться к 'Where-Object' вместо использования переключателя' -Include'? В [нескольких] (http://stackoverflow.com/questions/33684178/powershell-5-get-childitem-literalpath-doesnt-work-with-include-anymore) [other] (https://technet.microsoft.com /en-us/library/hh849800.aspx), похоже, что у людей возникают проблемы с некоторыми из использования переключателя '-Depth'. – gravity
Как предложил @gravity, вместо трубы вместо 'Where'. Вы не должны терять производительность, поскольку аргумент '-Include' получает все результаты от поставщика, а затем фильтрует до указанных включений. – TheMadTechnician
So.Я не так хорошо знаком с Where, но когда добавляю в '| Where-Object {$ _. Name -eq $ ExtList -or $ _. Extension -eq $ ExtList} 'ничего не происходит. Когда я иду в отладчик, это похоже на то, что переменная не проходит. @gravity @TheMadTechnician – Nick