volkerb
Goto Top

PowerShell: Verzeichnisrechte auslesen und in einer CSV abspeichern

Hallo,

ich bin im Netz auf ein PowerShell-Script gestoßen, welches meinen Anforderungen fast gerecht wird. Was mich an dem Script stört ist, dass ich nicht auswählen kann, wieviele Ebenen es auswerten soll.

Unser Verzeichnisbaum ist sehr lang. Ich habe die Rechte bis in der 3. Ebene gesetzt. Jetzt möchte ich das auf "Papier" - in dem Fall eine CSV-Daten - bringen.

Hier ist das Script:

$FolderPath = dir -Directory -Path "Z:\Verzeichnis\" -Recurse -Force  
$Report = @()
Foreach ($Folder in $FolderPath) {
    $Acl = Get-Acl -Path $Folder.FullName
    foreach ($Access in $acl.Access)
        {
            $Properties = [ordered]@{'FolderName'=$Folder.FullName;'AD  
Group or
User'=$Access.IdentityReference;'Permissions'=$Access.FileSystemRights; 'Inherited'=$Access.IsInherited}  
            $Report += New-Object -TypeName PSObject -Property $Properties
        }
}
$Report | Export-Csv -path "C:\tmp\FolderPermissions.csv"  

Es macht derzeit 4 Spalten. Soweit eigentlich ganz gut. Ich habe in meinem Verzeichnisbaum aber Rechte gegeben und verboten. Ich möchte also 2 weitere Spalten eingebaut haben, die einmal "Erlaubt" und einmal "Verboten" lauten.

Es macht auch keinen Sinn die komplette Strukturen zu scannen, wenn man vor hat, nur die ersten 3 oder 4 zu verwalten.

Ich bin kein Coding-Experte, weiss aber, dass der Schlüssel in "User=...." liegt face-smile ...nein, ich kenne die Felder nicht, die ich auslesen kann.

Wäre Super, wenn mir jemand in der Sache etwas helfen kann.

Ich bedanke mich.
Grüße
V

Content-ID: 649678

Url: https://administrator.de/contentid/649678

Ausgedruckt am: 24.11.2024 um 08:11 Uhr

147323
147323 09.02.2021 aktualisiert um 16:29:56 Uhr
Goto Top
Ich möchte also 2 weitere Spalten eingebaut haben, die einmal "Erlaubt" und einmal "Verboten" lauten.
Tipp, einfach mal die Variablen in der Schleife ausgeben lassen dann siehst du was es gibt:
$Access.AccessControlType
Liefert dir das gewünschte ("Allow" für Erlauben / "Deny" für Verbieten). Jetzt ist es nur noch logisch denken es selbst umzusetzen face-wink. Btw. eine Spalte in der steht Allow oder Deny würde dafür ja eigentlich auch reichen...
# ...
$Properties = [ordered]@{
    'FolderName'=$Folder.FullName  
    'AD Group or User'=$Access.IdentityReference  
    'Permissions'=$Access.FileSystemRights  
    'Inherited'=$Access.IsInherited  
    'AccessControlType' = $Access.AccessControlType  
}
#...

Gruß j.
VolkerB
VolkerB 09.02.2021 um 22:34:42 Uhr
Goto Top
Hi Jokari,

danke für den Tipp, aber ich bin nicht drauf gekommen. Ich habe irgendwas mit forbidden und so versucht... face-smile
wer halt net die Sprache spricht, kommt auch nicht auf den richtigen Begriff.

Ich habe es umgesetzt und das Script rennt erst mal.

Das mit dem Auslesen der Variablen ist mir noch fremd. naja, das nächste mal.

Danke noch mal für die Hilfe.

Grüße
V
147323
147323 10.02.2021 um 07:52:02 Uhr
Goto Top
VolkerB
VolkerB 10.02.2021 um 11:01:06 Uhr
Goto Top
Hallo Jokari,

es kommt noch zu einem Fehler:
Get-ChildItem : Es wurde kein Parameter gefunden, der dem Parameternamen "Directory" entspricht.  
In C:\Users\ipq-adm-yw8278\Desktop\NTFS.ps1:1 Zeichen:19

+ $FolderPath = dir -Directory -Path "Z:\Archiv\" -Recurse -Force  
+                   ~~~~~~~~~~
+ CategoryInfo          : InvalidArgument: (:) [Get-ChildItem], ParameterBindingException
+ FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
Ich kenne mich mit dem Syntax nicht aus. Hast Du da noch eine Idee?

Grüße
V
147323
Lösung 147323 10.02.2021 aktualisiert um 11:19:29 Uhr
Goto Top
Deine Powershell ist zu alt. Die alte Powershell 2.0 kennt den Parameter -Directory noch nicht.

Du kannst es aber so schreiben wenn du nicht updaten willst (würde ich aber dringend empfehlen!!)
$FolderPath = dir "Z:\Verzeichnis" -Recurse -Force | ?{$_.PSIsContainer}  
Das funktioniert auch mit der PS 2.0