ACL löschen von Computer Objekt mittels Powershell
Hallo,
leider funktionieren die gefunden Skripte in meinem Umfeld nicht, die an einem Computer Objekt eine AD Gruppe löschen soll.
An unseren OU's und den darunter befindlichen Computer Accounts hängt eine AD Gruppe die ich löschen will. Leider funktioniert das nicht global über die GUI.
Vielleicht hat jemand eine Idee, was hier falsch ist bzw. was ich falsch mache oder einen anderen Ansatz?
#Set these variables
$DistinguishedName = "OU=Test,DC=Firma,DC=de"
$user = "Domäne\AD Gruppe"
#Collect the current ACL
$Acl = Get-Acl $DistinguishedName
#Loop each access permission in the ACL
foreach ($access in $acl.Access) {
if ($access.IdentityReference.Value -eq $user) {
$acl.RemoveAccessRule($access)
}
}
#Set the ACL Back to the AD Object
set-acl $DistinguishedName -AclObject $acl
$acl gibt er mir richtig aus, bis auf die Gruppen. Dort steht in der Ausgabe ... (weil der Pfad zu lang ist).
Im Voraus vielen Dank
Peter
leider funktionieren die gefunden Skripte in meinem Umfeld nicht, die an einem Computer Objekt eine AD Gruppe löschen soll.
An unseren OU's und den darunter befindlichen Computer Accounts hängt eine AD Gruppe die ich löschen will. Leider funktioniert das nicht global über die GUI.
Vielleicht hat jemand eine Idee, was hier falsch ist bzw. was ich falsch mache oder einen anderen Ansatz?
#Set these variables
$DistinguishedName = "OU=Test,DC=Firma,DC=de"
$user = "Domäne\AD Gruppe"
#Collect the current ACL
$Acl = Get-Acl $DistinguishedName
#Loop each access permission in the ACL
foreach ($access in $acl.Access) {
if ($access.IdentityReference.Value -eq $user) {
$acl.RemoveAccessRule($access)
}
}
#Set the ACL Back to the AD Object
set-acl $DistinguishedName -AclObject $acl
$acl gibt er mir richtig aus, bis auf die Gruppen. Dort steht in der Ausgabe ... (weil der Pfad zu lang ist).
Im Voraus vielen Dank
Peter
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 32839026028
Url: https://administrator.de/contentid/32839026028
Ausgedruckt am: 25.11.2024 um 10:11 Uhr
12 Kommentare
Neuester Kommentar
Du musst die ACE auf dem Objekt löschen auf dem sie angelegt wurde. Wenn es eine vererbte ACE ist (IsInherited = true) kannst du die nicht löschen ohne die Vererbung zu unterbrechen, und das solltest du im AD unbedingt vermeiden. . Also das Objekt ermitteln auf dem die ACE angelegt wurde und dann dort löschen mit
Dann klappts auch mit der Nachbarin .
Gruß
Import-Module ActiveDirectory
$ou = "AD:\OU=Test,DC=Firma,DC=de"
$user = "Domäne\ADGruppe"
$acl = Get-ACL $ou
$acl.Access | ?{$_.IdentityReference -eq $user -and !$_.IsInherited} | %{$acl.RemoveAccessRule($_)}
Set-ACL $ou $acl
bis auf die Gruppen. Dort steht in der Ausgabe ... (weil der Pfad zu lang ist).
Einfach über Format-List oder $acl.Access.IdentityReference.Value ausgeben lassen.Gruß
Da steht sie mit ihrer SID drin. Wenn ich eine OU angebe, nicht.
SID zu Konto auflösen ist doch pillepalle(New-Object System.Security.Principal.SecurityIdentifier("S-1-5-32-548")).Translate([System.Security.Principal.NTAccount]).Value
Wahrscheinlich muss ich die Vererbung einschalten.
Äh nö. Du musst dir schon die untergeordneten Objekte holen (z.B. mit Get-ADComputer etc.) auf denen du das entfernen willst ist wie im Filesystem auch. du bearbeitest ja nur das OU Objekt selbst nicht was was darunter ist. Das was darunter ist erbt die ACL vom Parent nur nur wenn die ACL Protection dort nicht aktiv ist.Bitte Grundlagen anlesen bevor du dir dein AD zerschießt.
Zitat von @BPeter:
Im Filesystem kann ich aber die darunter liegenden Ordner und Dateien überschreiben. Das würde ich hier auch gerne machen.
Dann hol dir alle ComputerObjekte und OUs einer OU und durchlaufe sie mittels Schleife.Im Filesystem kann ich aber die darunter liegenden Ordner und Dateien überschreiben. Das würde ich hier auch gerne machen.
Import-Module ActiveDirectory
# ----------------
$OU = "OU=Test,DC=Firma,DC=de"
$account = Get-ADGroup 'S-1-5-32-548'
# ----------------
# ACEs von untergeordneten Computern und OUs entfernen (rekursiv)
foreach($obj in Get-ADObject -LDAPFilter "(|(ObjectClass=Computer)(ObjectClass=organizationalUnit))" -SearchBase $OU -SearchScope Subtree){
$acl = Get-ACL "AD:\$($obj.DistinguishedName)"
$ace = $acl.Access | ?{$_.IdentityReference.Translate([System.Security.Principal.SecurityIdentifier]) -eq $account.SID -and !$_.IsInherited}
if ($ace){
$ace | %{$acl.RemoveAccessRule($_)}
Set-ACL "AD:\$($obj.DistinguishedName)" $acl
}
}