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))
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.
3 Réponses :
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))
@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
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>
PS est parfois vraiment ennuyeux ... essayez ceci:
annonce d'emplacement fixe: # Cela fait fonctionner la commande suivante !!!!
Get-ACL -Path ("AD:" + ($ ou.DistinguishedName))