2016-11-16 7 views
0

私は、この問題はすでにここで議論されていましたが、ここのソリューションや他のサイトで私にとってうまくいかないようです。set-acl to AD OU

CNOに追加したい:OUでコンピュータオブジェクトを作成するための "CLUSTER"アクセス許可。すべてのソリューション

多かれ少なかれはアイデア以下に基づいています:

Set-Acl : This security ID may not be assigned as the owner of this object 
At line:1 char:8 
+ set-acl <<<< -aclobject $acl $ou 
    + CategoryInfo   : NotSpecified: (OU=sql,OU=ssd...=xxx,DC=net:String) [Set-Acl], ADException 
    + FullyQualifiedErrorId : ADProvider:SetSecurityDescriptor:ADError,Microsoft.PowerShell.Commands.SetAclCommand 

間違っている可能性がどのような任意のアイデアを:

$ou = 'OU=sql,OU=prod,DC=ssd,DC=xxx,DC=net' 
$cno = 'CLUSTER1' 
$sid = [System.Security.Principal.SecurityIdentifier](Get-ADComputer -Filter "name -eq `"$cno`"").SID 
$acl = get-acl $ou 
$objectGUID = New-Object guid bf967a86-0de6-11d0-a285-00aa003049e2 
$guidNull = New-Object guid 00000000-0000-0000-0000-000000000000 
$ace1 = new-object System.DirectoryServices.ActiveDirectoryAccessRule $sid,"ReadProperty,GenericExecute","Allow",$guidNull,"None",$guidNull 
$acl.AddAccessRule($ace1) 
$ace2 = new-object System.DirectoryServices.ActiveDirectoryAccessRule $sid,"CreateChild","Allow",$ObjectGUID,"None",$guidNull 
$acl.AddAccessRule($ace2) 
set-acl -aclobject $acl $ou 

を私は次のエラーを取得していますか?

答えて

0

Get-Acl/Set-Aclを使用するとファイルシステムでこのエラーが発生しました。 Get-Aclは、必要ない場合でもACL全体を取得します。 DACLのみが必要です。 Set-AclはACL全体を書き込もうとしますが、これはMicrosoftが失敗したためです。 Get-Aclコールを次のように変更してみてください。

$acl = (get-acl $ou).Access 

これは、追加しようとしているアクセスルールのみを取得する必要があります。誤報のため

EDIT

謝罪は、この作品のファイルシステムが、ADの "特別" です。基本的な問題は同じですが、Get-Aclは所有者を設定しようとすると、すべてのものとSet-Aclのチョークを取得します。上記のコマンドは、ドメイン管理者のコンテキストでadminとして実行されるpowershellウィンドウで実行してみてください。これにより、あなたはそれを強制することができます。代わりに私はADSIアクセラレータを使用しようとします。

$ou = 'OU=sql,OU=prod,DC=ssd,DC=xxx,DC=net' 
$cno = 'CLUSTER1' 
$sid = [System.Security.Principal.SecurityIdentifier](Get-ADComputer -Filter "name -eq `"$cno`"").SID 
$ouObject = [ADSI]("LDAP://$OU") 
$objectGUID = New-Object guid bf967a86-0de6-11d0-a285-00aa003049e2 
$guidNull = New-Object guid 00000000-0000-0000-0000-000000000000 
$ace1 = new-object System.DirectoryServices.ActiveDirectoryAccessRule $sid,"ReadProperty,GenericExecute","Allow",$guidNull,"None",$guidNull 
$ouObject.psbase.ObjectSecurity.AddAccessRule($ace1) 
$ace2 = new-object System.DirectoryServices.ActiveDirectoryAccessRule $sid,"CreateChild","Allow",$ObjectGUID,"None",$guidNull 
$ouObject.psbase.ObjectSecurity.AddAccessRule($ace2) 
$ouObject.psbase.CommitChanges() 

別のオプションは、DSACLSでそれを回避作業しようとするだろう、あなたは正確にあなたがが使用したいpermissions syntax把握する必要があります。実際のOUで実行する前にテストしてください。

$ou = 'OU=sql,OU=prod,DC=ssd,DC=xxx,DC=net' 
$cno = 'CLUSTER1' 
$sid = [System.Security.Principal.SecurityIdentifier](Get-ADComputer -Filter "name -eq `"$cno`"").SID 
#should grant the SID Generic Execute, Read Property, Create Children 
dsacls $ou /G $sid:GERPCC 
+0

しかし、このような場合には、私は、$ ACLオブジェクトをパラメータと最後の行を実行するためにさらにどのように$ acl.AddAccessRule($のACE1) –

+0

を実行することはできません:私は更新されている$ ou' –

+0

ACL $ -aclobject 'セット-ACLを私がテストして確認できたADSIソリューションの答えが働きました。 – StephenP

関連する問題