मैं एक रिकर्सिव फ़ंक्शन लिखने की कोशिश कर रहा हूं जो एक सरणी में जानकारी वापस कर देगा, हालांकि जब मैं फ़ंक्शन में रिटर्न स्टेटमेंट डालता हूं तो यह कुछ प्रविष्टियों को याद करता है।रिटर्न के साथ पावरहेल रिकर्सन
मैं फ़ोल्डर के साथ एसीएल को प्राप्त करने वाले फ़ोल्डरों की एक निर्दिष्ट गहराई को फिर से देखने की कोशिश कर रहा हूं। मुझे पता है कि GetChildItem में एक रिकर्स विकल्प है, लेकिन मैं केवल फ़ोल्डरों के 3 स्तरों के माध्यम से कदम उठाना चाहता हूं।
नीचे दिए गए कोड का अंश मैं परीक्षण के लिए उपयोग कर रहा हूं। getACLS एक वापसी कथन (नीचे टिप्पणी की) के बिना कहा जाता है जब परिणाम हैं:
फ़ोल्डर 1
फ़ोल्डर 12
फ़ोल्डर 13
फ़ोल्डर 2
जब वापसी कथन है प्रयुक्त मुझे निम्न आउटपुट मिलता है:
फ़ोल्डर 1
फ़ोल्डर 12
तो ऐसा लगता है कि रिटर्न स्टेटमेंट रिकर्सिव लूप से बाहर निकल रहा है?
विचार यह है कि मैं की तरह एक बहुआयामी सरणी वापस करना चाहते [फ़ोल्डर का नाम, [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
सुनिश्चित नहीं है कि यह काम करेगा क्योंकि मुझे वस्तुओं को घोंसला करने की आवश्यकता होगी। – Rumpleteaser
एक रिकर्सिव फ़ंक्शन को अलग-अलग विकल्पों को वापस करने में सक्षम होना चाहिए, भले ही यह रिकर्सिव केस का आधार मामला हो। तो यदि रिटर्न स्टेटमेंट पावरहेल में रिकर्सन तोड़ता है, तो रिकर्सन संभव नहीं है? या क्या उत्पादन का एक अलग प्रकार है? – Rumpleteaser
मैंने आपकी आवश्यकताओं को गलत समझा होगा। मुझे स्क्रिप्ट पर वापस जाने दो और फिर इसे फिर से देखें। मुझे रिकर्सन भाग याद आया और आपको एक सामान्य टिप दी। PowerShell में रिकर्सन किया जा सकता है। – ravikanth