Estoy intentando escribir una función recursiva que devolverá información en una matriz, sin embargo, cuando coloco una declaración de devolución en la función, falla ciertas entradas.Recursividad de Powershell con devolución
Estoy tratando de buscar recursivamente a través de una profundidad específica de carpetas obteniendo los acl asociados a la carpeta. Sé que getChildItem tiene una opción recurrente, pero solo quiero pasar por 3 niveles de carpetas.
El extracto del código siguiente es lo que he estado utilizando para probar. Cuando getACLS se llama sin una instrucción de retorno (comentado más adelante), los resultados son:
Carpeta 1
carpeta 12
carpeta 13
Carpeta 2
Cuando la instrucción de retorno es Utilizo la siguiente salida:
Carpeta 1
Carpeta 12
¿Parece que la declaración de retorno está saliendo del bucle recursivo?
La idea es que quiero devolver una matriz multidimensional como [nombre de la carpeta, [ACL], [[subcarpeta, [permisos], [[...]]]]] etc.
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
No estoy seguro de que funcione porque tendría que anidar los objetos. – Rumpleteaser
Una función recursiva debe poder devolver diferentes opciones dependiendo de si se trata de un caso base de un caso recursivo. Entonces, si una declaración de retorno interrumpe la recursión en powershell, ¿la recursión simplemente no es posible? o hay un tipo diferente de salida? – Rumpleteaser
Podría haber malinterpretado sus requisitos. Permítanme volver al guión y echarle un vistazo nuevamente. Me perdí la parte de recursividad y te di un consejo general. La recursión se puede hacer en PowerShell. – ravikanth