# Get the directories inside the template dir. as relative paths
$templateDirs = Get-ChildItem -Directory -Recurse -Name $templatePath
# Ditto for directory 1 and directory 2
$dir1Dirs = Get-ChildItem -Directory -Recurse -Name $dir1Path
$dir2Dirs = Get-ChildItem -Directory -Recurse -Name $dir2Path
# Compare to the template dirs.
Compare-Object $templateDirs $dir1Dirs
'---' # Output separator string just to show distinct outputs.
Compare-Object $templateDirs $dir2Dirs
Обратите внимание на использование -Name
с Get-ChildItem
, которое приводит к тому, что все подкаталоги (-Directory
, -Recurse
сообщаются как пути относительно входного каталога , что позволяет удобносравнение между деревьями каталогов.
Также обратите внимание, что командлет Compare-Object
по умолчанию выводит [pscustomobject]
экземпляров с двумя свойствами и только для различий между входными наборами:
.InputObject
, в вашем случае относительный путь к каталогу, который уникален для одного входного набора. .SideIndicator
, который представляет собой строку, указывающую, был ли входной объект уникальнымсо стороны слева (входной набор first , неявно связанный с параметром -ReferenceObject
) - '<='
- или со стороны right ( второй входной набор, неявно связанный с параметром -DifferenceObject
) - '=>'
Выше приведено что-то вроде:
InputObject SideIndicator
----------- -------------
C => # folder C only in dir. 1, not in template dir.
---
B <= # folder B only in template dir., not in dir. 2