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

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

Структура папки приведена ниже:

C: \ Users \ Documents \Azure\ репо \Templates\ каталог *

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

каталог2-dev -> childdir1 -> childdir2 -> b.parameters.json

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

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

directory5-uat -> childdir1 -> childdir2 -> 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

2 ответа

Вы печатаете $subDir - в 1-м случае это 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"

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

$subDirs = dir "C:\Users\Documents\Azure\Templates\*\" -Directory | ? {$_.fullname -notlike "*_Templates*"}
    $subDirs
    $subDirs | % {
        $_
        $_.Name.split('-')[1]
        dir $_ -Recurse -File -Filter "*parameters.json"
    }
Другие вопросы по тегам