Как распечатать файл для определенного родителя/дочернего элемента с помощью Get-ChildItem?

Я могу рекурсивно искать каталог, используя Get-ChildItem -Recurse. Но не получая результат, как ожидалось. Пробовал -Глубина тоже. Но не повезло.

Структура папок выглядит следующим образом:

C:\Users\Documents\Azure\repo\Templates\directory*

directory1-uat --> childdir1 --> childdir2 --> a.parameters.json

directory2-dev --> childdir1 --> childdir2 --> b.parameters.json

directory3-nonprod --> childdir1 --> childdir2 --> c.parameters.json

directory4-test --> childdir1 --> childdir2 --> d.parameters.json

directory5-uat --> дочерний каталог1 --> дочерний каталог2 --> e.parameters.json

Я пробовал следующее:


    $repo = 'C:\Users\Documents\Azure'
    $subDirs = Get-ChildItem -Path "$repo\Templates\*\" -Depth 0 -Directory | Where-Object fullname -notlike "*_Templates*"
    $subDirs
    ForEach ($subDir in $subDirs) {
        $subDir
        $envTag = $subDir.Name.split('-')[1]
        $envTag
        $subParamFiles = Get-ChildItem -Path $subDir.PSParentPath -Recurse -File -Include "*parameters.json"
        $subParamFiles
    }

Выход:


    d-----         02-Jan-20  8:48 PM                directory1-uat
    uat
    -a----         02-Jan-20  8:48 PM                a.parameters.json
    -a----         02-Jan-20  8:48 PM                b.parameters.json
    -a----         02-Jan-20  8:48 PM                c.parameters.json
    -a----         02-Jan-20  8:48 PM                d.parameters.json
    -a----         02-Jan-20  8:48 PM                e.parameters.json
    d-----         02-Jan-20  8:48 PM                directory2-dev
    dev
    -a----         02-Jan-20  8:48 PM                a.parameters.json
    -a----         02-Jan-20  8:48 PM                b.parameters.json
    -a----         02-Jan-20  8:48 PM                c.parameters.json
    -a----         02-Jan-20  8:48 PM                d.parameters.json
    -a----         02-Jan-20  8:48 PM                e.parameters.json
    d-----         02-Jan-20  8:48 PM                directory3-nonprod
    nonprod
    -a----         02-Jan-20  8:48 PM                a.parameters.json
    -a----         02-Jan-20  8:48 PM                b.parameters.json
    -a----         02-Jan-20  8:48 PM                c.parameters.json
    -a----         02-Jan-20  8:48 PM                d.parameters.json
    -a----         02-Jan-20  8:48 PM                e.parameters.json
    d-----         02-Jan-20  8:48 PM                directory4-test
    test
    -a----         02-Jan-20  8:48 PM                a.parameters.json
    -a----         02-Jan-20  8:48 PM                b.parameters.json
    -a----         02-Jan-20  8:48 PM                c.parameters.json
    -a----         02-Jan-20  8:48 PM                d.parameters.json
    -a----         02-Jan-20  8:48 PM                e.parameters.json
    d-----         02-Jan-20  8:48 PM                directory5-uat
    uat
    -a----         02-Jan-20  8:48 PM                a.parameters.json
    -a----         02-Jan-20  8:48 PM                b.parameters.json
    -a----         02-Jan-20  8:48 PM                c.parameters.json
    -a----         02-Jan-20  8:48 PM                d.parameters.json
    -a----         02-Jan-20  8:48 PM                e.parameters.json

Ожидаемый результат:


    d-----         02-Jan-20  8:48 PM                directory1-uat
    uat
    -a----         02-Jan-20  8:48 PM                a.parameters.json
    d-----         02-Jan-20  8:48 PM                directory2-dev
    dev
    -a----         02-Jan-20  8:48 PM                b.parameters.json
    d-----         02-Jan-20  8:48 PM                directory3-nonprod
    nonprod
    -a----         02-Jan-20  8:48 PM                c.parameters.json
    d-----         02-Jan-20  8:48 PM                directory4-test
    test
    -a----         02-Jan-20  8:48 PM                d.parameters.json
    d-----         02-Jan-20  8:48 PM                directory5-uat
    uat
    -a----         02-Jan-20  8:48 PM                e.parameters.json


person user47    schedule 04.01.2020    source источник
comment
я думаю, что ваша проблема в этом $subDir.PSParentPath. я подозреваю, что вы получаете путь parent ... а затем он получает все файлы json во всем дереве. что произойдет, если вы просто используете фактический путь вместо пути parent?   -  person Lee_Dailey    schedule 04.01.2020
comment
@Lee_Dailey У меня есть несколько каталогов: C:\Users\Documents\Azure\repo\Templates\directory*   -  person user47    schedule 04.01.2020
comment
вы печатаете $subDir - в первом случае это directory1-uat. затем вы получаете список файлов родительского каталога $subDir. вам нужны файлы в $subDir, а не во всем родительском дереве. попробуйте заменить $subDir.PSParentPath только на $subDir.   -  person Lee_Dailey    schedule 04.01.2020
comment
Кроме того, вам, вероятно, следует изучить возможность использования пользовательского объекта вместо ручного построения строк текста.   -  person Lee_Dailey    schedule 04.01.2020
comment
Вы очень кстати! рад немного помочь... [усмехается]   -  person Lee_Dailey    schedule 04.01.2020
comment
@Lee_Dailey Не могли бы вы добавить это как ответ, пожалуйста, чтобы ОП мог его принять? В противном случае это будет еще один вопрос без ответа, и другим будет сложнее найти, есть ли у них похожий вопрос.   -  person Theo    schedule 04.01.2020
comment
@Theo Я могу подтвердить, что проблема решена, и это можно рассматривать как ответ.   -  person user47    schedule 05.01.2020
comment
@Тео - готово! спасибо за внимание к публикации в качестве ответа. [усмехнуться]   -  person Lee_Dailey    schedule 05.01.2020


Ответы (2)


вы печатаете $subDir - в первом случае это directory1-uat. то вы получаете список файлов родительского каталога $subDir. вам нужны файлы в $subDir, а не во всем родительском дереве. [усмехнуться]

попробуйте заменить $subDir.PSParentPath только на $subDir. эта линия...

$subParamFiles = Get-ChildItem -Path $subDir.PSParentPath -Recurse -File -Include "*parameters.json"

... станет этим ...

$subParamFiles = Get-ChildItem -Path $subDir -Recurse -File -Include "*parameters.json"
person Lee_Dailey    schedule 05.01.2020

Вы должны указать текущий путь вместо родительского пути:

$subDirs = dir "C:\Users\Documents\Azure\Templates\*\" -Directory | ? {$_.fullname -notlike "*_Templates*"}
    $subDirs
    $subDirs | % {
        $_
        $_.Name.split('-')[1]
        dir $_ -Recurse -File -Filter "*parameters.json"
    }
person programmer365    schedule 04.01.2020