Gruppenbezeichnung herausfiltern und Berechtigungen ändern

Gruppenbezeichnung herausfiltern und Berechtigungen ändern

Erläuterung

Wenn Sie gewisse Berechtigungsgruppen suchen, die in Ordnern berechtigt wurden, können Sie mit diesem Skript die Gruppe aufsuchen und die Berechtigung von ‚Lesen‘ auf ‚Ändern‘ setzen.

Problembeschreibung

Manchmal sucht man als Admin ganz bestimmte Gruppen in einer unendlichen Anzahl von Unterordnern und möchte genau für diese dann die Berechtigungen ändern.

Persönliche Anpassungen

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

Skript

#
#  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
  }
}