Я пытаюсь написать рекурсивную функцию, которая будет возвращать информацию в массиве, однако, когда я помещаю инструкцию return в функцию, она пропускает определенные записи.
Я пытаюсь рекурсивно просматривать заданную глубинупапок, получающих ACL, связанные с папкой.Я знаю, что getChildItem имеет опцию recurse, но я хочу пройти только через 3 уровня папок.
Ниже приведен фрагмент кода, который я использовал для тестирования.Когда getACLS вызывается без оператора возврата (закомментировано ниже), получаются следующие результаты:
Папка 1
Папка 12
Папка 13
Папка 2
Когда используется оператор return, я получаю следующий вывод:
Папка 1
Папка 12
Таким образом, похоже, что оператор return выходит изрекурсивный цикл?
Идея состоит в том, что я хочу вернуть многомерный массив, такой как [имя папки, [acls], [[подпапка, [права доступа], [[...]]]]] и т. д.
cls
function getACLS ([string]$path, [int]$max, [int]$current) {
$dirs = Get-ChildItem -Path $path | Where { $_.psIsContainer }
$acls = Get-Acl -Path $path
$security = @()
foreach ($acl in $acls.Access) {
$security += ($acl.IdentityReference, $acl.FileSystemRights)
}
if ($current -le $max) {
if ($dirs) {
foreach ($dir in $dirs) {
$newPath = $path + '\' + $dir.Name
Write-Host $dir.Name
# return ($newPath, $security, getACLS $newPath $max ($current+1))
# getACLS $newPath $max ($current+1)
return getACLS $newPath $max ($current+1)
}
}
} elseif ($current -eq $max ) {
Write-Host max
return ($path, $security)
}
}
$results = getACLS "PATH\Testing" 2 0