1
votes

Impossible d'obtenir l'unité d'organisation Active Directory ACL

J'ai besoin de déléguer des droits (lecture, écriture, création d'un objet enfant, etc.) sur AD OU pour un compte de service.

J'ai utilisé le code suivant trouvé ici .

$OU = Get-ADOrganizationalUnit -Identity 'MyOU'

$p = New-Object System.Security.Principal.SecurityIdentifier (Get-ADuser "testaccount").SID
$acl = Get-ACL $ou.DistinguishedName | Select-Object -ExpandProperty Access

$acl.AddAccessRule((New-Object System.DirectoryServices.ActiveDirectoryAccessRule `
$p,"WriteProperty","Allow","Descendents",$guidmap["user"]))

Set-ACL -ACLObject $acl -Path ("AD:\"+($ou.DistinguishedName))

MyOU est comme" OU = xxx - [xx], OU = XXXXX, OU = XXX, DC = AD, DC = GROUPE, DC = NET "

Import-Module ActiveDirectory

$rootdse = Get-ADRootDSE

$guidmap = @{}
Get-ADObject -SearchBase ($rootdse.SchemaNamingContext) -LDAPFilter `
"(schemaidguid=*)" -Properties lDAPDisplayName,schemaIDGUID |
% {$guidmap[$_.lDAPDisplayName]=[System.GUID]$_.schemaIDGUID}

$extendedrightsmap = @{}
Get-ADObject -SearchBase ($rootdse.ConfigurationNamingContext) -LDAPFilter `
"(&(objectclass=controlAccessRight)(rightsguid=*))" -Properties displayName,rightsGuid |
% {$extendedrightsmap[$_.displayName]=[System.GUID]$_.rightsGuid}

$domain = Get-ADDomain

Je suis bloqué avec la commande get-ACL qui renvoie que le chemin dans mon AD n'existe pas, mais il existe.

Merci pour toute aide.


0 commentaires

3 Réponses :


1
votes

Vous définissez l'ACL en utilisant:

Get-ACL -Path "AD:\$($ou.DistinguishedName)"

Pourquoi ne pas l'obtenir de la même manière?

Get-ACL -Path ("AD:\"+($ou.DistinguishedName))

Ou comme ça:

Set-ACL -ACLObject $acl -Path ("AD:\"+($ou.DistinguishedName))


5 commentaires

@vegeta Vous devez utiliser le lecteur AD: pour que Get-Acl fonctionne. Si cela a produit un résultat vide, vous devez approfondir cela. Quelle est la déclaration exacte que vous avez faite? Quelles ont été vos valeurs d'entrée? Y a-t-il eu des erreurs? Veuillez modifier votre question pour fournir ces informations.


Je pense avoir trouvé pourquoi le get-acl ne renvoie rien. Dans le nom de mon OU donné en entrée, j'ai les caractères [et] "OU = test dsi - [12345] .....". Il semble que la commande ne l'aime pas. J'essaye sur une OU sans ces caractères et la commande fonctionne.


Réessayez avec Get-Acl -LiteralPath au lieu de Get-Acl -Path . Est-ce que ça marche pour toi?


Même erreur avec le literalPath: Impossible de trouver le chemin d'accès "// RootDSE / OU = ...." car il n'existe pas


donc finalement je décide d'utiliser dsacls. Je n'ai pas réussi à utiliser le get-acl sur OU qui contient des crochets dans le nom. Merci



0
votes

Vous devez convertir au format HEX les valeurs que Get-Acl CmdLet n'aime pas.

> Get-Acl -Path "AD:OU=\74\65\73\74\20\64\73\69\20\2D\20\5B\31\32\33\34\35\5D,DC=ad,DC=local"

Vous devez donc passer "OU = test dsi - \ 5B12345 \ 5D ..... " à Get-Acl au lieu de OU = test dsi - [12345] , par exemple p>

> Get-Acl -Path "AD:OU=test dsi - \5B12345\5D,DC=ad,DC=local"

Vous pouvez également convertir le nom de l'unité d'organisation entière (sans compter la partie OU = ):

[PS] C:\Windows\system32>$a = "[]"
[PS] C:\Windows\system32>$c=""
[PS] C:\Windows\system32>Foreach ($element in $a.ToCharArray()) {$c = $c + "\" + [System.String]::Format("{0:X2}", [System.Convert]::ToUInt32($element))}
[PS] C:\Windows\system32>$c
\5B\5D
[PS] C:\Windows\system32>

p>


0 commentaires

1
votes

PS est parfois vraiment ennuyeux ... essayez ceci:

annonce d'emplacement fixe: # Cela fait fonctionner la commande suivante !!!!

Get-ACL -Path ("AD:" + ($ ou.DistinguishedName))


0 commentaires