Powershell Organisationseinheit rechte für Gruppe vergeben
Hallo zusammen,
ich kämpfe gerade damit einer bestimmten Gruppe die Rechte auf eine OU im AD zu entziehen.
Als Script verwende ich folgendes:
Die Fehlermeldung, welche zurückkommt ist:
New-Object : Es wurden mehrere nicht eindeutige Überladungen gefunden für "ActiveDirectoryAccessRule" und die Argumentanzahl: "5".
Was mag vielleicht daran liegen, dass "Authenticated User" zum Beispiel lesenden Zugriff hat und er das nicht überschreiben kann?
Ich weiß aber nicht wie ich das Problem lösen kann.
Die Gruppe soll komplett auf FullControl = Deny stehen und nur auf diese Ou (nicht auf die darunter) angewendet werden.
Könnt Ihr mir da weiterhelfen?
ich kämpfe gerade damit einer bestimmten Gruppe die Rechte auf eine OU im AD zu entziehen.
Als Script verwende ich folgendes:
$dn = 'OU=Firma C,OU=Kunden,DC=contoso,DC=com'
$sid = New-Object System.Security.Principal.SecurityIdentifier (Get-ADGroup "LDAP-FirmaA").SID.Value
$acl = Get-Acl -Path "AD:$dn"
$acl.SetAccessRuleProtection($true, $true) # remove inheritance
$acl.AddAccessRule((New-Object System.DirectoryServices.ActiveDirectoryAccessRule $sid,"Full","Deny","None","All"))
Set-Acl -Path "AD:$dn" -AclObject $acl
Die Fehlermeldung, welche zurückkommt ist:
New-Object : Es wurden mehrere nicht eindeutige Überladungen gefunden für "ActiveDirectoryAccessRule" und die Argumentanzahl: "5".
Was mag vielleicht daran liegen, dass "Authenticated User" zum Beispiel lesenden Zugriff hat und er das nicht überschreiben kann?
Ich weiß aber nicht wie ich das Problem lösen kann.
Die Gruppe soll komplett auf FullControl = Deny stehen und nur auf diese Ou (nicht auf die darunter) angewendet werden.
Könnt Ihr mir da weiterhelfen?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 618507
Url: https://administrator.de/forum/powershell-organisationseinheit-rechte-fuer-gruppe-vergeben-618507.html
Ausgedruckt am: 24.12.2024 um 13:12 Uhr
12 Kommentare
Neuester Kommentar
Hi,
E.
Edit:
Die solltest diese 5 Argumente vorher explizit als Variablen deklarieren und füllen, unter expliziter Angabe des Datentyps. Sodass einer von den drei Constructors eindeutig zugeordnet werden kann.
ActiveDirectoryAccessRule Constructors
siehe "Overloads"
Zitat von @violak:
Die Fehlermeldung, welche zurückkommt ist:
New-Object : Es wurden mehrere nicht eindeutige Überladungen gefunden für "ActiveDirectoryAccessRule" und die Argumentanzahl: "5".
Was mag vielleicht daran liegen, dass "Authenticated User" zum Beispiel lesenden Zugriff hat und er das nicht überschreiben kann?
Nein, das bezieht sich rein auf die Interpretation dieser Kommandozeile (Zeile 8). Nicht auf die Ausführung.Die Fehlermeldung, welche zurückkommt ist:
New-Object : Es wurden mehrere nicht eindeutige Überladungen gefunden für "ActiveDirectoryAccessRule" und die Argumentanzahl: "5".
Was mag vielleicht daran liegen, dass "Authenticated User" zum Beispiel lesenden Zugriff hat und er das nicht überschreiben kann?
E.
Edit:
Die solltest diese 5 Argumente vorher explizit als Variablen deklarieren und füllen, unter expliziter Angabe des Datentyps. Sodass einer von den drei Constructors eindeutig zugeordnet werden kann.
ActiveDirectoryAccessRule Constructors
siehe "Overloads"
???
Da stehen die Overloads des Constructors doch klar beschrieben. Jene mit 5 Argumenten habe ich Dir hier mal markiert.
Da stehen die Overloads des Constructors doch klar beschrieben. Jene mit 5 Argumenten habe ich Dir hier mal markiert.
Es wurden mehrere nicht eindeutige Überladungen gefunden für "ActiveDirectoryAccessRule" und die Argumentanzahl: "5".
Die Fehlermeldung ist ja eindeutig ... .NET kann durch deinen Konstruktor nicht wissen welchen du benutzen willst weil du keine expliziten Typen bei den Parametern verwendest. Damit .NET den richtigen Kontruktor auswählen kann musst du hier zumindest bei so vielen Parameter den Typ explizit festlegen damit dieser eindeutig ist. Außerdem ist die ActiveDirectoryRights Enumeration "Full" fehlerhaft, du wählst hier aus einer Kombination dieser möglichen Werte:https://docs.microsoft.com/en-us/dotnet/api/system.directoryservices.act ...
Nur am Rande: die SID musst du nicht doppelt aus dem Value erstellen diese ist im AD Object schon im richtigen Type in der Property SID vorhanden, lässt sich also vereinfachen.
$dn = 'OU=Firma C,OU=Kunden,DC=contoso,DC=com'
$sid = (Get-ADGroup "LDAP-FirmaA").SID
$acl = Get-Acl -Path "AD:$dn"
$acl.SetAccessRuleProtection($true, $true)
$acl.AddAccessRule((New-Object System.DirectoryServices.ActiveDirectoryAccessRule ([System.Security.Principal.SecurityIdentifier]$sid,[System.DirectoryServices.ActiveDirectoryRights]::GenericAll,[System.Security.AccessControl.AccessControlType]::Allow,[System.DirectoryServices.ActiveDirectorySecurityInheritance]::All)))
Set-Acl -Path "AD:$dn" -AclObject $acl
Zitat von @violak:
ja aber wenn ich dein Skript ausführe bekomme ich nach wie vor den gleichen Fehler.
Nö, hier einwandfrei getestet. Habs für dich oben aber zusätzlich noch expliziter und alle Parameter mit Typ deklariert.ja aber wenn ich dein Skript ausführe bekomme ich nach wie vor den gleichen Fehler.
Verwendet wird der folgende Konstruktor
https://docs.microsoft.com/en-us/dotnet/api/system.directoryservices.act ...
Muss das hier [System.DirectoryServices.ActiveDirectorySecurityInheritance]:: denn vor jeden Parameter?
Nicht vor jeden der gewünschte Konstruktor muss für den Interpreter aber eindeutig genug sein!Ich verstehe den Aufbau einfach nicht und auch nicht warum das so kompliziert ist.
Wenn könnte ja jeder programmieren, und es gibt zig unterschiedliche Anwendungsfälle die alle berücksichtigt werden müssen, deswegen gibt es diverse Konstruktoren. Ist hier eben kein Kindergarten sondern ein Admin-Forum . Lerne objektorientiertes Programmieren dann verstehst du auch was ein Konstruktor ist .Bis denn dann,
G. w.
Zitat von @146189:
Das kommt aber auch daher, wenn man einen Anfänger einfach nur mit komplexen Einzeilern zu füttern versucht. Ich nehme Deine Zeilen mal auseinander, vielleicht versteht sie es dann.Ich verstehe den Aufbau einfach nicht und auch nicht warum das so kompliziert ist.
Wenn könnte ja jeder programmieren. Ist eben kein Kindergarten sondern ein Admin-Forum . Lerne objektorientiertes Programmieren dann verstehst du es auch .[string]$dn = 'OU=Firma C,OU=Kunden,DC=contoso,DC=com'
$sid = (Get-ADGroup "LDAP-FirmaA").SID
$acl = Get-Acl -Path "AD:$dn"
$acl.SetAccessRuleProtection($true, $true)
$adRights = [System.DirectoryServices.ActiveDirectoryRights]::GenericAll
$accessType = [System.Security.AccessControl.AccessControlType]::Allow
$inheritanceType
= [System.DirectoryServices.ActiveDirectorySecurityInheritance]::All
$NewRule = New-Object System.DirectoryServices.ActiveDirectoryAccessRule $sid, $adRights, $accessType , $inheritanceType
$acl.AddAccessRule($NewRule)
Set-Acl -Path "AD:$dn" -AclObject $acl
Das kommt aber auch daher, wenn man einen Anfänger einfach nur mit komplexen Einzeilern zu füttern versucht.
Den Einzeiler hat sie selbst gepostet, hab ihn nur übernommen ."Die Berechtigungen von .... sind nicht richtig zugeordnet, so dass einige Einträge ohne Wirkung sein könnten....."
Wenn du die Vererbung unterbrichst wundert mich das nicht wirklich .Vielleicht solltest du dich da nochmal ganz genau informieren bevor du einfach so ohne weiteres an den ACLs mit GenericAll pfuschst ohne zu wissen was das für Auswirkungen das für die User hat und vor allem auch mal mit AdminSDHolder beschäftigen wenn du dich wunderst warum manche Berechtigungen nach einer Stunde wieder glatt gebügelt werden.
Zitat von @146189:
Vielleicht solltest du dich da nochmal ganz genau informieren bevor du einfach so ohne weiteres an den ACLs mit GenericAll pfuschst ohne zu wissen was das für Auswirkungen das für die User hat und vor allem auch mal mit AdminSDHolder beschäftigen wenn du dich wunderst warum manche Berechtigungen nach einer Stunde wieder glatt gebügelt werden.
Nein, daran wird das nicht liegen."Die Berechtigungen von .... sind nicht richtig zugeordnet, so dass einige Einträge ohne Wirkung sein könnten....."
Wenn du die Vererbung unterbrichst wundert mich das nicht wirklich .Vielleicht solltest du dich da nochmal ganz genau informieren bevor du einfach so ohne weiteres an den ACLs mit GenericAll pfuschst ohne zu wissen was das für Auswirkungen das für die User hat und vor allem auch mal mit AdminSDHolder beschäftigen wenn du dich wunderst warum manche Berechtigungen nach einer Stunde wieder glatt gebügelt werden.
Ich schätze, das ist die Meldung, die kommt, wenn in der ACL eine Verweigerung nicht am Anfang der ACL steht. Genau dann kann es passieren, "... dass einige Einträge ohne Wirkung sein könnten ...", nämlich diese Verweigerungen.
Aber Das passiert normalerweise erst gar nicht, wenn man die ACL mit den "offiziellen" Tools bearbeitet: MMC, PowerShell, .Net, usw.
Solche Meldungen hatte ich auch schon mal. Dann habe ich mit der MMC die betreffende ACL einmal testweise geändert (etwas hinzugefügt und wieder entfernt) und neu gespeichert. Dann war das wieder gut.
Wie das bei mir dazu kam, habe ich auch nie herausgefunden (nicht geforscht).
Das kann übrigens auch bei den NTFS-ACL's so passieren.