Gruppenbezeichnung herausfiltern und Berechtigungen ändern
Kurz & knapp: Das PowerShell-Skript durchsucht die Unterordner eines Pfades nach ACL-Einträgen einer bestimmten Berechtigungsgruppe und hebt deren NTFS-Recht von Lesen/Ausführen auf Ändern an — inklusive Entfernen der alten Lese-ACE, damit keine doppelten Einträge entstehen.
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 Berechtigung 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)
# ALTE 'ReadAndExecute'-REGEL ENTFERNEN (sonst bleibt sie zusaetzlich bestehen -> doppelte ACE)
$objReadAceRule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList ($objADSecGruppe, $objFileSystemRightReadExecute, $objInheritanceFlagDirectory, $objPropagationFlagsNone, $objAccessControlTypeAllow)
$null = $objOrdnerItemACL.RemoveAccessRule($objReadAceRule)
# NEUE ACL HINZUFÜGEN
$objOrdnerItemACL.AddAccessRule($objDirectoryAceRule)
# NEUE ACL AUF DAS OBJEKT SCHREIBEN
$objOrdnerItemACL | Set-Acl -Path $objOrdnerItem.FullName
}
}
Kategorien: Skripte