PowerShell Ordnern Gruppen zuordnen und Rechte setzen: Unterschied zwischen den Versionen
Aus znilwiki
BLinz (Diskussion | Beiträge) KKeine Bearbeitungszusammenfassung |
BLinz (Diskussion | Beiträge) K (→Lösung) |
||
Zeile 46: | Zeile 46: | ||
$o_ace3 = New-Object System.Security.Accesscontrol.FileSystemAccessRule ("SYSTEM", "FullControl", "ContainerInherit,ObjectInherit", "none", "Allow") | $o_ace3 = New-Object System.Security.Accesscontrol.FileSystemAccessRule ("SYSTEM", "FullControl", "ContainerInherit,ObjectInherit", "none", "Allow") | ||
$o_acl.AddAccessRule($o_ace3) | $o_acl.AddAccessRule($o_ace3) | ||
$o_ace4 = New-Object System.Security.Accesscontrol.FileSystemAccessRule ("ERSTELLER-BESITZER", "FullControl", "ContainerInherit,ObjectInherit", "InheritOnly", "Allow") | #$o_ace4 = New-Object System.Security.Accesscontrol.FileSystemAccessRule ("ERSTELLER-BESITZER", "FullControl", "ContainerInherit,ObjectInherit", "InheritOnly", "Allow") | ||
$o_acl.AddAccessRule($o_ace4) | #$o_acl.AddAccessRule($o_ace4) | ||
$o_ace5 = New-Object System.Security.Accesscontrol.FileSystemAccessRule (("TESTDOMAIN\" + "Administrator"), "FullControl", "ContainerInherit,ObjectInherit", "none", "Allow") | $o_ace5 = New-Object System.Security.Accesscontrol.FileSystemAccessRule (("TESTDOMAIN\" + "Administrator"), "FullControl", "ContainerInherit,ObjectInherit", "none", "Allow") | ||
$o_acl.AddAccessRule($o_ace5) | $o_acl.AddAccessRule($o_ace5) | ||
Zeile 73: | Zeile 73: | ||
</source> | </source> | ||
---- | ---- | ||
==Kommentare== | ==Kommentare== | ||
<comments /> | <comments /> |
Version vom 21. Juli 2023, 09:50 Uhr
Changelog:
- 20.07.2023 erste Version
Problem
Ich hatte um die 100 Ordner welche per Robocopy auf einen neuen Server kopiert wurden.
Ein Ordner heißt zum Beispiel Buchhaltung.
Buchhaltung
Es gibt dazu die Active-Directory-Gruppen
Laufwerk-Buchhaltung-R Laufwerk-Buchhaltung-RW
für den Zugriff.
Gewünscht war
- Die beiden Gruppen unter Sicherheit bei den Ordner hinterlegen
- die -R Gruppe nur lesend
- die -RW Gruppen lesend und schreibend
- Rekursiv die Rechte neu setzen
Lösung
Das Skript arbeitet alle Verzeichnisse im vorgegebenen Ordner ab und sucht für jeden die passenden AD-Gruppen.
Dann werden die Rechte auf dem Ordner alle entfernt und neu gesetzt.
Das Skript muss auf einem System mit der installierten PowerShell-Erweiterung für Actice Directory ausgeführt werden.
Es sollte auch mit UNC-Pfaden funktionieren.
# Alle Verzeichnisse im Pfad abarbeiten, die AD-Gruppen dazu suchen und die Berechtigungen setzen
$s_CurrentPath = "D:\"
# Liste der Ordnernamen holen
$a_ListFolders = Get-ChildItem -Path $s_CurrentPath -Directory -Force -ErrorAction SilentlyContinue | Select-Object Name,FullName
foreach($s_folder in $a_ListFolders) {
if ( (-not ($s_folder.Name -like "*System Volume Information*")) -and (-not ($s_folder.Name -like "*RECYCLE.BIN*")) -and (-not ($s_folder.Name -like "*DfsRoot*")) ) {
$s_GroupSearch1 = "Laufwerk-" + $s_folder.Name + "-*"
$s_GroupSearch2 = "Laufwerk-" + $s_folder.Name + "-[A-Z]-*"
Write-Host "---------------------------------------------------------------------------------------"
Write-Host "$s_GroupSearch1 für" $s_folder.FullName
# Rechte des Ordners holen
$o_acl = Get-Acl -Path $s_folder.FullName
# Vererbung deaktivieren
$o_acl.SetAccessRuleProtection($true, $false)
# vorhandene Rechte entfernen
$o_acl.Access | ForEach-Object { $o_acl.RemoveAccessRule($_) | Out-Null }
# Administratoren hinzufügen
$o_ace1 = New-Object System.Security.Accesscontrol.FileSystemAccessRule ("VORDEFINIERT\Administratoren", "FullControl", "ContainerInherit,ObjectInherit", "none", "Allow")
$o_acl.AddAccessRule($o_ace1)
$o_ace2 = New-Object System.Security.Accesscontrol.FileSystemAccessRule (("TESTDOMAIN\" + "Domänen-Admins"), "FullControl", "ContainerInherit,ObjectInherit", "none", "Allow")
$o_acl.AddAccessRule($o_ace2)
$o_ace3 = New-Object System.Security.Accesscontrol.FileSystemAccessRule ("SYSTEM", "FullControl", "ContainerInherit,ObjectInherit", "none", "Allow")
$o_acl.AddAccessRule($o_ace3)
#$o_ace4 = New-Object System.Security.Accesscontrol.FileSystemAccessRule ("ERSTELLER-BESITZER", "FullControl", "ContainerInherit,ObjectInherit", "InheritOnly", "Allow")
#$o_acl.AddAccessRule($o_ace4)
$o_ace5 = New-Object System.Security.Accesscontrol.FileSystemAccessRule (("TESTDOMAIN\" + "Administrator"), "FullControl", "ContainerInherit,ObjectInherit", "none", "Allow")
$o_acl.AddAccessRule($o_ace5)
# Gruppen hinzufügen deren Namen zum Ordner passt
$a_ListDriveGroups = Get-ADGroup -Filter 'Name -like $s_GroupSearch1' | Where-Object Name -like $s_GroupSearch2 | Select-Object Name
if ( $a_ListDriveGroups -eq $null ) {
Write-Host $s_folder.Name + " hat keine Gruppe(n) im Active Directory"
} else {
foreach($DriveGroup in $a_ListDriveGroups) {
Write-Host $DriveGroup.Name
$s_GroupType = $DriveGroup.Name.Substring($DriveGroup.Name.Length - 2)
if ( $s_GroupType -eq "RW" ) {
$o_aceDriveGroup = New-Object System.Security.Accesscontrol.FileSystemAccessRule (("TESTDOMAIN\" + $DriveGroup.Name), "FullControl", "ContainerInherit,ObjectInherit", "none", "Allow")
} else {
$o_aceDriveGroup = New-Object System.Security.Accesscontrol.FileSystemAccessRule (("TESTDOMAIN\" + $DriveGroup.Name), "Read", "ContainerInherit,ObjectInherit", "none", "Allow")
}
$o_acl.AddAccessRule($o_aceDriveGroup)
}
}
# Rechte schreiben
Set-Acl -Path $s_folder.FullName -AclObject $o_acl
$o_acl = ""
}
}
Kommentare
Loading comments...