PowerShell script Benutzerberechtigungen anpassen
Hallo Admin Gemeinde,
hat jemand ein funktionierendes ps-script für folgende Ordnerberechtigungen anzupassen
Hauptordner : homedrive
unterhalb des Hauptordners die Homedrives der Nutzer
mmustermann
emustermann
mmueller
jdoe
usw.
aufgrund der unterschiedlich zugewiesenen Berechtigungen auf den jeweiligen Homedrive Ordnern sollen diese nun einheitlich angepasst werden.
Die Berechtigungen jedes Ordners sollen folgende Berechtigungen enthalten :
SYSTEM - Vollzugriff
Domänen-Admins - Vollzugriff
Nutzer - Ausführen-Lesen (wobei der Nutzername gleich Ordnername ist)
wer kann mir da helfen.
Habe so ein ps script schonmal irgendwo gesehen, aber ich finde nix mehr sinnvolles.
Vielen Dank.
oscar papa
hat jemand ein funktionierendes ps-script für folgende Ordnerberechtigungen anzupassen
Hauptordner : homedrive
unterhalb des Hauptordners die Homedrives der Nutzer
mmustermann
emustermann
mmueller
jdoe
usw.
aufgrund der unterschiedlich zugewiesenen Berechtigungen auf den jeweiligen Homedrive Ordnern sollen diese nun einheitlich angepasst werden.
Die Berechtigungen jedes Ordners sollen folgende Berechtigungen enthalten :
SYSTEM - Vollzugriff
Domänen-Admins - Vollzugriff
Nutzer - Ausführen-Lesen (wobei der Nutzername gleich Ordnername ist)
wer kann mir da helfen.
Habe so ein ps script schonmal irgendwo gesehen, aber ich finde nix mehr sinnvolles.
Vielen Dank.
oscar papa
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1796878767
Url: https://administrator.de/forum/powershell-script-benutzerberechtigungen-anpassen-1796878767.html
Ausgedruckt am: 22.12.2024 um 15:12 Uhr
12 Kommentare
Neuester Kommentar
Moin,
ich hab da selbst mal was ergoogelt und nutze es seither:
Was welche Variable regelt und welche Optionen du benötigst, musst du selbst mal schauen ;)
Gruß
Doskias
ich hab da selbst mal was ergoogelt und nutze es seither:
$dir="Dein Pfad"
$Benutzer="Benutzr oder Gruppe z.b Domänen-Benutzer"
$ACL=get-acl $dir
# Rechte Festlegen
$Rights = [System.Security.AccessControl.FileSystemRights] "Modify, Synchronize"
$Access=[System.Security.AccessControl.AccessControlType]::Allow
$Inherit=[System.Security.AccessControl.InheritanceFlags]::ContainerInherit `
-bor [System.Security.AccessControl.InheritanceFlags]::ObjectInherit
$Prop=[System.Security.AccessControl.PropagationFlags]::NoPropagateInherit
#$Prop=[System.Security.AccessControl.PropagationFlags]::InheritOnly
$AccessRule = new-object System.Security.AccessControl.FileSystemAccessRule `
($BENUTZER,$Rights,$Inherit,$Prop,$Access)
#Rechte Setzen
$ACL.AddAccessRule($AccessRule)
set-acl -AclObject $ACL -Path $DIR
Was welche Variable regelt und welche Optionen du benötigst, musst du selbst mal schauen ;)
Gruß
Doskias
Moin,
Gruß Thomas
# Hauptordner
$Root = "C:\Pfad\zum\Hauptordner"
$New_ACLs = @(
[System.Security.AccessControl.FileSystemAccessRule]::new("$ENV:USERDOMAIN\Domänen-Admins", 'FullControl', "ContainerInherit, ObjectInherit", "none", "Allow")
[System.Security.AccessControl.FileSystemAccessRule]::new("NT AUTHORITY\System", 'FullControl', "ContainerInherit, ObjectInherit", "none", "Allow")
[System.Security.AccessControl.FileSystemAccessRule]::new("$ENV:USERDOMAIN\Domänen-Benutzer", 'Read', "ContainerInherit, ObjectInherit", "none", "Allow")
)
# ACL des Hauptordners lesen
$ACL = Get-ACL $Root
# Vererbung deaktivieren
$ACL.SetAccessRuleProtection($true,$False)
# Besitzer auf Domänen-Admins setzen
$ACL.SetOwner( $New_ACLs.IdentityReference )
# Neue ACLs hinzufügen
$New_ACLs | %{ $ACL.SetAccessRule($_) }
# ACL Setzen
Set-ACL $Root $ACL
Gruß Thomas
# Hauptordner
$Root = "C:\Pfad\zum\Hauptordner"
# Schleife für Unterordner
Foreach ($dir in Get-ChildItem -Directory $Root) {
$New_ACLs = @(
[System.Security.AccessControl.FileSystemAccessRule]::new("$ENV:USERDOMAIN\Domänen-Admins", 'FullControl', "ContainerInherit, ObjectInherit", "none", "Allow")
[System.Security.AccessControl.FileSystemAccessRule]::new("NT AUTHORITY\System", 'FullControl', "ContainerInherit, ObjectInherit", "none", "Allow")
[System.Security.AccessControl.FileSystemAccessRule]::new("$ENV:USERDOMAIN\$($dir.Name)", 'Read', "ContainerInherit, ObjectInherit", "none", "Allow")
)
# ACL des Unterordners lesen
$ACL = Get-ACL $dir.Fullname
# Vererbung deaktivieren
$ACL.SetAccessRuleProtection($true,$false)
# Besitzer auf Domänen-Admins setzen
$ACL.SetOwner( $New_ACLs.IdentityReference )
# Neue ACLs hinzufügen
$New_ACLs | %{ $ACL.SetAccessRule($_) }
# ACL Setzen
Set-ACL $dir.Fullname $ACL
} # Ende der Schleife
Der Fehler tritt auf, wenn es ein Benutzerkonto nicht gibt. Möglicherweise habt ihr einen Ordner, zu dem kein Benutzer existiert?
Ändere Zeile 23 mal ab auf
Das sollte aufschluss darüber geben, bei welchem User die Probleme auftreten.
Ändere Zeile 23 mal ab auf
$New_ACLs | %{
try { $ACL.SetAccessRule($_) }
catch { Write-Warning "Rechte für '$($_.IdentityReference.Value)' konnte nicht hinzugefügt werden, bitte überprüfen Sie, ob der User existiert" }
}
Das sollte aufschluss darüber geben, bei welchem User die Probleme auftreten.
Moin,
stimmt, da war ein Denkfehler drin, sorry. So müsste es gehen:
Ebenso, danke.
Gruß Thomas
stimmt, da war ein Denkfehler drin, sorry. So müsste es gehen:
Foreach ($Identity in $New_ACLs) {
try { $ACL.SetAccessRule($Identity) }
catch { Write-Warning "Rechte für '$($Identity.IdentityReference.Value)' konnte nicht hinzugefügt werden, bitte überprüfen Sie, ob der User existiert" }
}
Ebenso, danke.
Gruß Thomas
# Hauptordner
$Root = "D:\Test\"
# Zu löschender User
$User = "12345678"
# Schleife für Unterordner
Foreach ($dir in Get-ChildItem -Directory $Root) {
try {
# ACL des Unterordners lesen
$ACL = Get-ACL $dir.Fullname -ErrorAction Stop
# Alle Rechte des Benutzers entfernen
$ACL.Access | ? IdentityReference -Match ([regex]::Escape($User)) | %{[void]$ACL.RemoveAccessRule($_); $Changed = 1}
# Falls Rechte verändert wurden, neu setzen
if ($Changed) {
Set-ACL $dir.Fullname $ACL
Write-Host "Rechte für Benutzer '$User' wurde aus '$($dir.Name)' entfernt. "
}
} catch { Write-Host -ForegroundColor "Red" $_.Exception.Message }
# Änderungsstatus zurücksetzen
$Changed = 0
} # Ende der Schleife