2016-08-15 8 views
0

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

enter image description here

EDIT ------

Установка $ ExtList выглядит следующим образом:

@((Invoke-WebRequest -Uri "https://fsrm.experiant.ca/api/v1/get").content | convertfrom-json | % {$_.filters}) 

Это поможет вам точный список и формат, который я использую.

$ Путь тянет из CSV-файла, который выглядит следующим образом:

enter image description here

Этот CSV имеет более 3000 различных акций в нем. Я знаю, что это странно, да, я должен сделать это так для нашей инфраструктуры.

+1

Можете ли вы попробовать подключиться к '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

+2

Как предложил @gravity, вместо трубы вместо 'Where'. Вы не должны терять производительность, поскольку аргумент '-Include' получает все результаты от поставщика, а затем фильтрует до указанных включений. – TheMadTechnician

+0

So.Я не так хорошо знаком с Where, но когда добавляю в '| Where-Object {$ _. Name -eq $ ExtList -or $ _. Extension -eq $ ExtList} 'ничего не происходит. Когда я иду в отладчик, это похоже на то, что переменная не проходит. @gravity @TheMadTechnician – Nick

ответ

0

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