Powershell GCI Recursive Depth перестает работать при добавлении параметра Include

У меня есть то, что я предполагаю, что это простой вопрос. У меня есть большой блок кода, который я написал. Короче говоря, он загружает динамический список имен файлов и расширений, импортирует 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 различных акций. Я знаю, что это странно, да, я должен сделать это для нашей инфраструктуры.


person Nick    schedule 15.08.2016    source источник
comment
Можете ли вы попробовать подключиться к Where-Object вместо использования переключателя -Include? В несколько другие местоположения, похоже, у людей возникают проблемы с использованием некоторых -Depth переключателей.   -  person gravity    schedule 15.08.2016
comment
Как предложил @gravity, вместо этого используйте канал Where. Вы не должны терять производительность, так как аргумент -Include получает все результаты от провайдера, а затем фильтрует до указанных включений.   -  person TheMadTechnician    schedule 15.08.2016
comment
Так. Я не так хорошо знаком с Где, но когда я добавляю | Where-Object {$_.Name -eq $ExtList -or $_.Extension -eq $ExtList}, ничего не происходит. Когда я захожу в отладчик, это похоже на то, что переменная не проходит. @гравитация @TheMadTechnician   -  person Nick    schedule 16.08.2016
comment
Не используйте -eqиспользуйте -match или -like. Вы сравниваете строки друг с другом, и даже если они буквально одинаковы (то есть: .ext и .ext), вы все равно часто будете видеть, что -eq терпит неудачу... (Щелкните ссылку, чтобы просмотреть различия между -match и -like , Я предпочитаю -match для точных сравнений, которые, как я знаю, статичны.   -  person gravity    schedule 16.08.2016
comment
@gravity Я отредактировал сообщение, чтобы включить то, что я делаю ... может быть, вы сможете направить меня в сторону того, что я делаю неправильно.   -  person Nick    schedule 16.08.2016
comment
Поскольку для уточнения потребовалось некоторое время, и я «догадался» о ваших настройках $ExtList и $path, пожалуйста, дополнительно отредактируйте свой ответ один раз больше и покажите эти два задания, если мой ответ вам не подходит. ;)   -  person gravity    schedule 16.08.2016
comment
К сожалению, ваших дополнительных правок недостаточно для продолжения. Предоставьте нам минимальный воспроизводимый пример, чтобы мы не теряли время в дальнейшем.   -  person gravity    schedule 17.08.2016


Ответы (1)


После переключения на работу в Windows Server 2012 R2 параметр depth работает с include. Кажется, это была ошибка с версией, на которой я был.

person Nick    schedule 05.06.2017