У меня есть то, что я предполагаю, что это простой вопрос. У меня есть большой блок кода, который я написал. Короче говоря, он загружает динамический список имен файлов и расширений, импортирует CSV-файл с корнями каждого из наших общих ресурсов и сравнивает файлы, чтобы найти совпадения.
$Directory = Get-ChildItem -Path $path -Recurse -Depth 2 -Include $ExtList -Force
Супер просто, правда? За исключением того, что параметр глубины не работает. Он рекурсивно просматривает каждый уровень. Если я сделаю это:
$Directory = Get-ChildItem -Path $path -Depth 2 -Force
Параметр «Глубина» работает отлично и выполняет поиск только по двум уровням. Если я не включаю рекурсию или глубину, он работает, как и ожидалось, выполняя поиск только на верхнем уровне. Единственная разница в том, что я удаляю параметр -Include.
$Path — это переменная типа \server\root\ $ExtList — это массив имен файлов.
Опять же, они оба работают по отдельности, но не вместе.
Мне нужно иметь здесь как глубину, так и параметры включения. Кто-нибудь знает, что я делаю неправильно, или это глюк?
Редактировать ---------------------------
Выполняя «Где-объект», я пробовал это:
$Directory = Get-ChildItem -Path $path -Recurse -Depth 2 -Force | Where-Object {$_.Extension -like $ExtList}
И... ничего не происходит. Для тестирования этому скрипту требуется около 10 минут для успешного запуска в хороший день, он завершился менее чем за 1 секунду. (точнее, 715 мс). Когда я приступаю к отладке, кажется, что в объект where ничего не передается.
РЕДАКТИРОВАТЬ------
Настройка $ExtList выглядит следующим образом:
@((Invoke-WebRequest -Uri "https://fsrm.experiant.ca/api/v1/get").content | convertfrom-json | % {$_.filters})
Это даст вам точный список и формат, которые я использую.
$Path извлекается из CSV-файла, который выглядит следующим образом:
Этот CSV содержит более 3000 различных акций. Я знаю, что это странно, да, я должен сделать это для нашей инфраструктуры.
Where-Object
вместо использования переключателя-Include
? В несколько другие местоположения, похоже, у людей возникают проблемы с использованием некоторых-Depth
переключателей. - person gravity   schedule 15.08.2016Where
. Вы не должны терять производительность, так как аргумент-Include
получает все результаты от провайдера, а затем фильтрует до указанных включений. - person TheMadTechnician   schedule 15.08.2016| Where-Object {$_.Name -eq $ExtList -or $_.Extension -eq $ExtList}
, ничего не происходит. Когда я захожу в отладчик, это похоже на то, что переменная не проходит. @гравитация @TheMadTechnician - person Nick   schedule 16.08.2016-eq
— используйте-match
или-like
. Вы сравниваете строки друг с другом, и даже если они буквально одинаковы (то есть:.ext
и.ext
), вы все равно часто будете видеть, что-eq
терпит неудачу... (Щелкните ссылку, чтобы просмотреть различия между-match
и-like
, Я предпочитаю-match
для точных сравнений, которые, как я знаю, статичны. - person gravity   schedule 16.08.2016$ExtList
и$path
, пожалуйста, дополнительно отредактируйте свой ответ один раз больше и покажите эти два задания, если мой ответ вам не подходит. ;) - person gravity   schedule 16.08.2016