Jump to content

Get-ACL Gruppenname herausfiltern und Permission ändern


Direkt zur Lösung Gelöst von MurdocX,
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo zusammen,

 

in einer Ordnerstruktur sind "Read" - Berechtigungen für mehrere Gruppen eingerichtet. Die Gruppen beginnen alle mit den gleichen drei Buchstaben.

Nun möchte ich bei all diesen Gruppen für alle Ordner bei denen sie eingetragen sind die Berechtigung auf "Modify" ändern. Mein bisheriger (recht armer) Ansatz:

 
$folder = "C:\Temp"
$name = "*ABC*"
$folders = Get-ChildItem $folder -recurse | where-object { $_.PSIScontainer }
$ACLs = Get-Acl $folders.FullName | ForEach-Object { $_.Access | Where {$_.IdentityReference -Like $name}
$group = $_.IdentityReference
$permission = $group,"Modify", $InheritanceFlag, $PropagationFlag, $objType
$Ar = New-Object System.Security.AccessControl.FileSystemAccessRule($permission)
$Acl.SetAccessRule($Ar)
Set-Acl $Acl
}
 

Vielen Dank schon mal für mögliche Denkanstösse!

bearbeitet von Molle
Link zu diesem Kommentar
  • Beste Lösung

Hallo Molle,

 

mit deinem "recht armen" Ansatz kommst du nicht weit. Ich hab Dir das benötigte Skript geschrieben und getestet. Es sucht in dem angegebenen Pfad nach den Ordnern und Unterordnern. Ließt die Berechtigungen aus und schreibt die mit 'ReadandExecute" zu 'Modify' um. Die Vererbung ist aktiviert. 

 

Die 3 Variablen sind auszufüllen:

 

$strPfad = 'LW:\ORDNER'
$strGruppenbezeichnung = 'MB-DL'
$strDomäne = 'DOMÄNE' # Domäne ohne Endung wie z.B. '.local' -> NETBIOS-NAME

 

Viel Erfolg ;-)


#
#  Author: Jan Weis
#  www.it-explorations.de
#

# --- BENUTZER VARIABLEN ---#


$strPfad = 'LW:\ORDNER'
$strGruppenbezeichnung = 'MB-DL'
$strDomäne = 'DOMÄNE' # Domäne ohne Endung wie z.B. '.local' -> NETBIOS-NAME


# --- SYSTEM VARIABLEN --- #


# FileSystemRights Flags
$objFileSystemRightModify = [System.Security.AccessControl.FileSystemRights]'Modify'
$objFileSystemRightReadExecute = [System.Security.AccessControl.FileSystemRights]'ReadAndExecute'
      
# InheritanceFlags Flags
$objInheritanceFlagDirectory = [System.Security.AccessControl.InheritanceFlags]::ContainerInherit -bor [System.Security.AccessControl.InheritanceFlags]::ObjectInherit 
$objInheritanceFlagFile = [System.Security.AccessControl.InheritanceFlags]::None

# Common Flags
$objAccessControlTypeAllow = [System.Security.AccessControl.AccessControlType]::Allow 
$objPropagationFlagsNone = [System.Security.AccessControl.PropagationFlags]::None 


# --- SKRIPT ---#


Foreach ($objOrdnerItem in (Get-ChildItem -Path $strPfad))
{
  
  # Berechtigungen abrufen
  $objOrdnerItemACL = Get-Acl -Path $objOrdnerItem.FullName

  # Prüfe jedes Berechtigungsobjekt ob es den gewünschten Namen beinhaltet UND die Berechtigung 'ReadAndExecute' beinhaltet
  [String[]]$strACLGruppenListe = ($objOrdnerItemACL.Access | Where-Object {$_.IdentityReference -match $strGruppenbezeichnung -and $_.FileSystemRights -like 'ReadAndExecute*'}).IdentityReference.Value

  # Passen die Berchtigung für jede gefundene Gruppe an 
  foreach ($strACLGruppenItem in $strACLGruppenListe)
  {
  
    # Für jede gefundene Gruppe wird die Berechtigung auf 'Modify' angepasst
    
    # Domäne entfernen
    $strACLGruppenItem = $strACLGruppenItem.replace("$strDomäne\",'')

    # NTAccount-Object anlegen
    $objADSecGruppe = New-Object  -TypeName System.Security.Principal.NTAccount -ArgumentList ($strACLGruppenItem) 
      
    # FILESYSTEMACCESSRULE-OBJECT ANLEGEN
    $objDirectoryAceRule = New-Object  -TypeName System.Security.AccessControl.FileSystemAccessRule  -ArgumentList ($objADSecGruppe, $objFileSystemRightModify, $objInheritanceFlagDirectory, $objPropagationFlagsNone, $objAccessControlTypeAllow) 
      
    # NEUE ACL HINZUFÜGEN
    $objOrdnerItemACL.AddAccessRule($objDirectoryAceRule)
      
    # NEUE ACL AUF DAS OBJEKT SCHREIBEN
    $objOrdnerItemACL | Set-Acl -Path $objOrdnerItem.FullName
  }

}

Um eine Ausgabe zu bekommen, kannst du noch unter dem letzten Command "Neue ACL auf das Objekt schreiben" folgenden Befehl darunter setzen: 

Write-Host ":: [Berechtigung angepasst] Gruppe: '$strACLGruppenItem'; Pfad: '$($objOrdnerItem.FullName)'" -ForegroundColor Yellow
bearbeitet von MurdocX
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...