bpeter
Goto Top

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

Content-Key: 32839026028

Url: https://administrator.de/contentid/32839026028

Printed on: July 16, 2024 at 20:07 o'clock

Mitglied: 13034433319
13034433319 Jun 21, 2024 updated at 14:06:16 (UTC)
Goto Top
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. face-wink. Also das Objekt ermitteln auf dem die ACE angelegt wurde und dann dort löschen mit
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
Dann klappts auch mit der Nachbarin face-smile.
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ß
Member: BPeter
BPeter Jun 21, 2024 at 14:13:34 (UTC)
Goto Top
Das macht Sinn.
Nur das mit der Nachbarin lass ich bleiben face-smile

Vielen Dank für die schnelle Hilfe

Schönes Wochenende
Member: BPeter
BPeter Jun 21, 2024 at 14:22:24 (UTC)
Goto Top
Zitat von @13034433319:

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. face-wink. Also das Objekt ermitteln auf dem die ACE angelegt wurde und dann dort löschen mit
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
Dann klappts auch mit der Nachbarin face-smile.
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ß

Wenn ich mir die ACL anzeigen lasse, stehen die Account Operators nicht drin. In der GUI sehe ich sie. Das ist die Gruppe, die entfernen will.
Mitglied: 13034433319
13034433319 Jun 21, 2024 updated at 14:26:54 (UTC)
Goto Top
screenshot

Works as designed.
Member: BPeter
BPeter Jun 21, 2024 at 14:35:37 (UTC)
Goto Top
Da steht sie mit ihrer SID drin. Wenn ich eine OU angebe, nicht.
capture-sid
Mitglied: 13034433319
13034433319 Jun 21, 2024 updated at 14:40:05 (UTC)
Goto Top
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  
Ob du da jetzt eine SID im Filter angibst oder einen Account-Name ist doch Jacke wie Hose.
Member: BPeter
BPeter Jun 21, 2024 at 14:40:24 (UTC)
Goto Top
Habe jetzt die SID angegeben, dann löscht er sich auch auf den OU's. Nur an den Computer Objekten nicht, weil dort die Vererbung aus ist.
Wahrscheinlich muss ich die Vererbung einschalten.
Member: BPeter
BPeter Jun 21, 2024 at 14:41:25 (UTC)
Goto Top
Zitat von @13034433319:

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  
Ob du da jetzt eine SID im Filter angibst oder einen Account-Name ist doch Jacke wie Hose.

Ja, aber ich habe sie in der Auflistung überhaupt nicht gesehen, so bald ich eine OU angegeben habe.
Mitglied: 13034433319
13034433319 Jun 21, 2024 updated at 14:46:13 (UTC)
Goto Top
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.
Member: BPeter
BPeter Jun 21, 2024 at 14:46:06 (UTC)
Goto Top
Im Filesystem kann ich aber die darunter liegenden Ordner und Dateien überschreiben. Das würde ich hier auch gerne machen.
Mitglied: 13034433319
Solution 13034433319 Jun 21, 2024 updated at 17:01:38 (UTC)
Goto Top
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.

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    
    }
}
Member: BPeter
BPeter Jun 21, 2024 at 14:52:45 (UTC)
Goto Top
Passt.

Danke