Ich erhalte rekursiv eine Liste von Ordnern mit ihren jeweiligen Berechtigungen in einem Powershell-Skript, aber wenn der rekursive Teil geschieht mein Ausgabe-String druckt die Ordnerstruktur jedes Mal ein Beispiel dafür ist:Abrufen von Ordnern und Berechtigungen in Powershell
Ich habe einen Ordner namens C: \ temp, in diesem Ordner befinden sich 2 leere Ordner C: \ temp \ folder1 und C: \ temp \ folder2. Mit meinem Skript wäre die Ausgabe:
Ich habe zur besseren Lesbarkeit der Berechtigungen weggelassen
C:\temp
C:\temp\folder1
C:\temp
C:\temp\folder2
Ich will das nicht passieren soll ich eine Liste von Ordnern mit ihren Berechtigungen und dann, wenn die Berechtigungen für einen untergeordneten Ordner sind unterschiedlich, dann schauen Sie sich die untergeordneten Ordner dieses Ordners an. Dies funktioniert abgesehen von der Saitenbildung, bei der ich denke, dass ich ein frisches Paar Augen brauche, um es anzuschauen, weil ich nirgendwohin komme.
Schätzen Sie die Hilfe im Voraus,
Sam
Code:
Add-Type -AssemblyName System.Windows.Forms
Import-Module ActiveDirectory
$info = ""
$OutputString
$step = 0
function DisplayForm{
#Some GUI code
#$textBox takes in the base folder from the user
if ($result -eq [System.Windows.Forms.DialogResult]::OK)
{
$baseFolder = $textBox.Text
$ParentProperties = (Get-Acl $baseFolder).Access| Select-Object -ExpandProperty IdentityReference
$OutputString = $OutputString + $baseFolder + "`r`n" + $ParentProperties + "`r`n`r`n"
$ChildFolders = Get-ChildItem $baseFolder | where {$_.Attributes -eq 'Directory'}
FindPriorities($baseFolder)
$info = "SAVED TO FOLDER"
outputList
}
}
function FindPriorities{
param($fileName)
$ChildFolders = Get-ChildItem $fileName | where {$_.Attributes -eq 'Directory'}
$step = $step + 1
$TempString = ""
foreach ($folder in $ChildFolders){
$child = $fileName + "\\" + $folder.name
$ParentProperties = (Get-Acl $fileName).Access| Select-Object -ExpandProperty IdentityReference
$ChildProperties = (Get-Acl $child).Access| Select-Object -ExpandProperty IdentityReference
$parentString=""
foreach ($p in $ParentProperties){
$parentString= $parentString + $p
}
$childString=""
foreach ($c in $childProperties){
$childString = $childString + $c
}
if($childString -ne $parentString){
$OutputString = $OutputString + $child + "`r`n" + $ChildProperties + "`r`n`r`n"
FindPriorities ($child)
}else{
$OutputString = $OutputString + $child + "`r`n" + $ChildProperties + "`r`n`r`n"
}
}
}
function outputList{
$OutputString
}
DisplayForm
Sie den gleichen foreach-Code haben in 'DisplayForm', die in' FindPriorities' ist so sein alles zweimal laufen wird. ('foreach ($ Ordner in $ ChildFolders) {...}'). Am Ende der Funktion 'DisplayForm' rufen Sie' DisplayForm' erneut auf. – Richard
Ja, das ist nur für die Unterordner im Basisordner. Wenn es einen hat, der andere Berechtigungen hat, geht es in den Ordner und findet die Unterordner –
- -folder1 ----------- Ordner 2 (Gleiche Berechtigungen) ----------- Ordner 3 (Verschiedene Berechtigungen) ----------- --------------------------- Ordner 4 ...... und so weiter. Ich möchte immer, dass es zurückkommt und den Rest der Ordner im Basisordner durchsucht, deshalb habe ich es so –