Jump to content

Karl-Heinz

Newbie
  • Content Count

    7
  • Joined

  • Last visited

Community Reputation

0 Neutral

About Karl-Heinz

  • Rank
    Newbie
  1. OK, jetzt hab ichs :-). Danke auch. if ((Compare-Object -ReferenceObject $SourceACL -DifferenceObject $TargetACL -Property IdentityReference, FileSystemRights) -eq $null) ist die Lösung. Entwerder Compare-Object gibt etwas zurück oder eben nicht. Und wenn es nix zurück gibt ist alles OK und wenn doch was zurück kommt, kann ich eine Aktion dran hängen. Manchmal kann die Lösung so einfach sein...
  2. IdentityReference FileSystemRights SideIndicator ----------------- ---------------- ------------- DOMAIN\TYPE_Ordner_Test-RO ReadAndExecute, Synchronize == DOMAIN\File Server Administrators FullControl == DOMAIN\TYPE_Ordner_Test Modify, Synchronize => DOMAIN\TYPE_Ordner_Test Write, ReadAndExecute, Synchronize <= NT AUTHORITY\SYSTEM FullControl <= BUILTIN\Administrators FullControl <= Funktioniert es vielleicht nicht, weil ich das positive und nicht das negative prüfe? Oder ist es hier entscheidend in welcher Zeile was steht?
  3. Hallo BOfH_666, diese "einfache" Idee hatte ich auch schon. Nur funktioniert diese leider nicht. Es kommt immer ein OK zurück. Und genau das ist es ja was ich nicht verstehe oder wo ich auf dem Schlauch stehe. Daher bin ich für Alternativen oder andere Heransgehensweisen mehr als dankbar. $SourceACL = Get-Acl $CurrentPathLocal | Select-Object -ExpandProperty Access | Where-Object {$_.IdentityReference -notin @("BUILTIN\Administrators", "NT AUTHORITY\SYSTEM")} $TargetACL = Get-Acl "\\$TargetServer\$Type\$Folder" | Select-Object -ExpandProperty Access | Where-Object {$_.IdentityReference -notin @("BUILTIN\Administrators", "NT AUTHORITY\SYSTEM")} if ((Compare-Object -ReferenceObject $SourceACL -DifferenceObject $TargetACL -Property IdentityReference, FileSystemRights -IncludeEqual).SideIndicator -eq '==') {Write-Host -ForegroundColor Green 'ok'} SourceACL: FileSystemRights : Write, ReadAndExecute, Synchronize AccessControlType : Allow IdentityReference : DOMAIN\TYPE_Ordner_Test IsInherited : False InheritanceFlags : ContainerInherit, ObjectInherit PropagationFlags : None FileSystemRights : ReadAndExecute, Synchronize AccessControlType : Allow IdentityReference : DOMAIN\TYPE_Ordner_Test-RO IsInherited : False InheritanceFlags : ContainerInherit, ObjectInherit PropagationFlags : None TargetACL: FileSystemRights : Modify, Synchronize AccessControlType : Allow IdentityReference : DOMAIN\TYPE_Ordner_Test IsInherited : False InheritanceFlags : ContainerInherit, ObjectInherit PropagationFlags : None FileSystemRights : ReadAndExecute, Synchronize AccessControlType : Allow IdentityReference : DOMAIN\TYPE_Ordner_Test-RO IsInherited : False InheritanceFlags : ContainerInherit, ObjectInherit PropagationFlags : None
  4. OK, die Entenfüßchen habe ich nir hier vergessen, Danke. mit where {$_.IdentityReference -notin @("BUILTIN\Administrators", "NT AUTHORITY\SYSTEM") reduziere ich mir die Ausgabe nur auf die zwei Gruppen die hier explizit Berechtigung bekommen soll. Und das ist immer die Gruppe Gruppe-TYPE (für Editor) & Gruppe-TYP_RO (für Leser). SYSTEM und Administratoren sind eh immer berechtigt und die will und brauche ich nicht in meiner Ausgabe. Und das funktioniert perfekt. Der Typ der am Ende in der Varibalen $SourceACL bzw. $TargetACL steht, ist der hier: $SourceACL | Get-Member TypeName: Selected.System.Security.AccessControl.FileSystemAccessRule Name MemberType Definition ---- ---------- ---------- Equals Method bool Equals(System.Object obj) GetHashCode Method int GetHashCode() GetType Method type GetType() ToString Method string ToString() FileSystemRights NoteProperty System.Security.AccessControl.FileSystemRights FileSystemRights=Modify, Synchronize IdentityReference NoteProperty System.Security.Principal.NTAccount IdentityReference=IAVGROUP\TYPE_Ordnername bzw. $SourceACL.GetType() IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True Object[] System.Array
  5. Hallo MurdocX, ich hatte mir schon fast gedacht, daß meine Idee noch nicht die beste ist. War auch erstmal nur meine erste Idee. Es ist nicht zwingend nötig meinen Code zu verbessern, ich würde mich auch über optimalere oder bessere Möglichkeiten freuen, um mein Ziel zu erreichen. Aktuell habe ich es mit einer do Schleifer versucht, $SourceACL = Get-Acl $Quelle | select -ExpandProperty Access | where {$_.IdentityReference -notin @("BUILTIN\Administrators", "NT AUTHORITY\SYSTEM)} | select -Property IdentityReference,FileSystemRights $TargetACL = Get-Acl "\\$TargetServer\$Type\$Folder" | select -ExpandProperty Access | where {$_.IdentityReference -notin @("BUILTIN\Administrators", "NT AUTHORITY\SYSTEM")} | select -Property IdentityReference,FileSystemRights $Count = 0 $SourceACLCount = $SourceACL.Count do { if ((Compare-Object -ReferenceObject $SourceACL[$Count] -DifferenceObject $TargetACL[$Count] -IncludeEqual -Property IdentityReference, FileSystemRights).SideIndicator -eq '==') { Write-Host -ForegroundColor Green 'ACL Quelle :', '(', $SourceACL[$Count].IdentityReference, '-', $SourceACL[$Count].FileSystemRights, ')', 'entspricht ACL Ziel :', '(', $TargetACL[$Count].IdentityReference, '-', $TargetACL[$Count].FileSystemRights, ')' } Else { Write-Host -ForegroundColor Red 'ACL Quelle :', '(', $SourceACL[$Count].IdentityReference, '-', $SourceACL[$Count].FileSystemRights, ')', 'entspricht nicht ACL Ziel :', '(', $TargetACL[$Count].IdentityReference, '-', $TargetACL[$Count].FileSystemRights, ')' break } $Count++ } until ($Count -ge $SourceACLCount) was schonmal gut klappt, aber er steigt mir bei einem Fehler noch nicht mit einer Meldung was nicht stimmt aus.
  6. Hallo, vielen Dank für die Unterstützung und Tips. @daabm: icacls RC=0 ? Mir geht es nicht um die Umstellung von icacls auf PowerShell, sondern um die Prüfung der ACL! @BOfH_666: Mir geht es nicht um die Umstellung von icacls auf PowerShell, sondern um die Prüfung der ACL!
  7. Hallo liebe Community, ich knobel gerade mit einem Problem und komme nicht so richtig weiter. Folgende Anforderung: - ich lege auf einem Server ein neues Verzeichnis an New-Item -Path "\\$TargetServer\$Type\$Folder" -ItemType Directory - ich setze Berechtigungen auf dieses Verzeichnis (aktuell noch mit icacls, weil ich es mit PS cmdlet (noch) nicht hin bekomme) Start-Process -FilePath "$env:SystemRoot\System32\icacls.exe" -ArgumentList "`"\\$TargetServer\$Type\$Folder`" /grant `"$($Type)_$($Folder)`"`:(OI)(CI)(M,DC)" -Wait Start-Process -FilePath "$env:SystemRoot\System32\icacls.exe" -ArgumentList "`"\\$TargetServer\$Type\$Folder`" /grant `"$($Type)_$($Folder)-RO`":(OI)(CI)(RX)" -Wait - ich prüfe ob die Berechtigungen auch wirklich angekommen sind (aktuell nur ob zwei Gruppen berechtigt sind (könnten auch irgendwelche anderen zwei Gruppen sein)) $ACL = (Get-Acl "\\$TargetServer\$Type\$Folder" | select -ExpandProperty Access | where {$_.IdentityReference -notin @("BUILTIN\Administrators", "NT AUTHORITY\SYSTEM")}).IdentityReference if ($ACL.Count -ge 2) { Write-Host -ForegroundColor Green "Berechtigungen auf Ressource \\$TargetServer\$Type\$Folder OK :", ($ACL.Count -ge 2) } Else { Write-Host -ForegroundColor Red "Berechtigungen auf Ressource \\$TargetServer\$Type\$Folder nicht OK, setze Berechtigungen erneut..." Get-Acl -Path "$Source" | Set-Acl -Path "\\$TargetServer\$Type\$Folder" Write-Host -ForegroundColor Yellow -Object "Prüfe Berechtigungen auf Ressource \\$TargetServer\$Type\$Folder erneut..." $ACL = (Get-Acl "\\$TargetServer\$Type\$Folder" | select -ExpandProperty Access | where {$_.IdentityReference -notin @("BUILTIN\Administrators", "NT AUTHORITY\SYSTEM")}).IdentityReference if ($ACL.Count -ge 2) { Write-Host -ForegroundColor Green "Berechtigungen auf Ressource \\$TargetServer\$Type\$Folder jetzt OK :", ($ACL.Count -ge 2) } Else { Write-Host -ForegroundColor Red "Berechtigungen auf Ressource \\$TargetServer\$Type\$Folder nicht OK!" Write-Host -ForegroundColor Red 'Abbruch!' break } } Meine aktuelle Idee zur Prüfung, die so leider nich nicht klappt, ist diese hier: $ACL = (Get-Acl $CurrentPathLocal | select -ExpandProperty Access | where {$_.IdentityReference -notin @("BUILTIN\Administrators", "NT AUTHORITY\SYSTEM")}).IdentityReference Es kommt folgendes Array zurück: Value ----- DOMAIN\TYPE_Test DOMAIN\TYPE_Test-RO Jetzt möchte ich prüfen ob die Berechtigungen auch die sind die hätten ankommen sollen. Und hier denke ich wahrscheinlich etwas falsch oder zu komliziert, warum ich hier schreibe. Meine Idee bisher ist mir die einzelnen Zeilen des Arrays auszugeben und gegen die Berechtigungen zu prüfen. Heißt also wenn 1. Zeile des Arrays dem Ordnernamen entspricht (Editor), weil die Berechtuigungen heißen immer wie die Ordnernamen, dann ist OK und prüfe die Leser Gruppe (also Ordnername-RO). Wenn beides OK ist mach weiter, wenn nicht, dann setzte die falsche richtig oder setze halt alle nochmal. if ($ACL[0] -like "$($Domain.ToUpper().Split('.')[0])" + '\' + "$($Type)_$($Folder)" -eq $true) { write-host -ForegroundColor Green "OK" $FolderACL = $true } Else { if ($ACL[0] -like "$($Domain.ToUpper().Split('.')[0])" + '\' + "$($Type)_$($Folder)-RO" -eq $true) { write-host -ForegroundColor Green "OK" $FolderACLRO = $true } Else { Write-Host -ForegroundColor Red "nOK" $FolderACL = $false } Write-Host -ForegroundColor Red "nOK" $FolderACL = $false } Write-Host "FolderACL $FolderACL" Write-Host "FolderACLRO $FolderACLRO" if ($ACL[1] -like "$($Domain.ToUpper().Split('.')[0])" + '\' + "$($Type)_$($Folder)-RO" -eq $true) { write-host -ForegroundColor DarkGreen "OK" $FolderACLRO = $true } Else { if ($ACL[0] -like "$($Domain.ToUpper().Split('.')[0])" + '\' + "$($Type)_$($Folder)-RO" -eq $true) { write-host -ForegroundColor DarkGreen "OK" $FolderACLRO = $true } Else { Write-Host -ForegroundColor DarkRed "nOK" $FolderACL = $false } Write-Host -ForegroundColor DarkRed "nOK" $FolderACLRO = $false } Write-Host "FolderACL $FolderACL" Write-Host "FolderACLRO $FolderACLRO" Aber so klappt es nicht so wie es soll oder wie ich es mir aktuell gedacht habe. Wenn hier einer eine besser Idee hat, dann immer gern her damit. Vielen Dank.
×
×
  • Create New...