设置'关注用户或群组可以加入域名'在Active Directory中创建的计算机对象的权限

时间:2015-03-13 16:39:07

标签: powershell active-directory vmware

我有一个VMWare View环境,我们通常需要通过大量计算机来扩展池。

对于我们的环境,要将池中的链接克隆计算机添加到域,我们必须在Active Directory中预先创建计算机对象,并临时将“关注用户或组可以加入域”权限设置为某个组。当您一次手动执行一台计算机时 - 您可以使用GUI /向导设置该权限。

我试图通过PowerShell脚本将计算机添加到Active Directory来自动执行此操作。我有脚本工作,它添加了计算机对象,但我没有找到一种明显的方法来设置这些权限,无论是在创建计算机对象时还是在创建后修改权限。

如何使用PowerShell设置这些权限?

2 个答案:

答案 0 :(得分:1)

两个链接:

previous time this was asked here

scripting guys forums

如果您希望同时限制域加入者但允许特定人员加入特定计算机,则必须设置四个权限(请参阅第二个链接)。

另一种选择是为View提供一个服务帐户,该帐户位于GPO受限域Joeans组中。然后,您可以限制域用户帐户加入域,只需拥有正确的服务帐户和支持技术人员。服务帐户将使用Add-Computer自动添加它所创建的每个VM。

答案 1 :(得分:1)

Get-Acl和Set-Acl可以做到这一点,但它并不漂亮。非AD访问ACE非常简单:您授予或拒绝用户/组/计算机/等的权限,并决定ACE是否将应用于对象和/或其任何子项。 AD aces也可以是广泛的,但它们也可以授予或拒绝某些属性,对象,扩展权限和经过验证的权限(实际上有数千种不同的东西)。继承也可以仅锁定到特定类型的对象。您可以使用必须查找的GUID来执行此操作。

在其他答案中删除链接时,您需要授予以下四项内容:

  • 重置密码
  • 验证写入DNS主机名
  • 验证写入服务主体名称
  • 写帐户限制

你需要四个独立的ACE才能做到这一点。以下代码段显示了如何执行此操作,但它假定您具有AD cmdlet,并且您希望将ACE应用于每个计算机对象。可以将这些ACE应用于计算机对象将继承的OU,但是您需要更改继承和(可选)InheritedObjectType GUID。无论如何,试试这个:

$IdentityReference = [System.Security.Principal.NTAccount] "UserNameHere"
$ComputerDistinguishedName = Get-ADComputer ComputerNameHere | select -ExpandProperty DistinguishedName

$SD = Get-Acl "AD:\$ComputerDistinguishedName"


# Validated write to DNS host name
$SD.AddAccessRule((New-Object System.DirectoryServices.ActiveDirectoryAccessRule (
    $IdentityReference,
    "Self",  # Validated Write access mask ([System.DirectoryServices.ActiveDirectoryRights])
    "Allow", # ACE type ([System.Security.AccessControl.AccessControlType])
    "72e39547-7b18-11d1-adef-00c04fd8d5cd",  # GUID for 'Validated write to DNS host name'
    "None",  # ACE will only apply to the object it's assigned to ([System.DirectoryServices.ActiveDirectorySecurityInheritance])
    [guid]::Empty                            # Inherited object type (in this case in can apply to any objects)
)))

# Validated write to service principal name
$SD.AddAccessRule((New-Object System.DirectoryServices.ActiveDirectoryAccessRule (
    $IdentityReference,
    "Self",  # Access mask
    "Allow",
    "f3a64788-5306-11d1-a9c5-0000f80367c1",  # GUID for 'Validated write to service principal name'
    "None",
    [guid]::Empty
)))

# Write Account Restrictions
$SD.AddAccessRule((New-Object System.DirectoryServices.ActiveDirectoryAccessRule (
    $IdentityReference,
    "WriteProperty",  # Access mask
    "Allow",
    "4c164200-20c0-11d0-a768-00aa006e0529",  # GUID for 'Account Restrictions' PropertySet
    "None",
    [guid]::Empty
)))

# Reset password
$SD.AddAccessRule((New-Object System.DirectoryServices.ActiveDirectoryAccessRule (
    $IdentityReference,
    "ExtendedRight",  # Access mask
    "Allow", 
    "00299570-246d-11d0-a768-00aa006e0529",  # GUID for 'Reset Password' extended right
    "None",
    [guid]::Empty
)))

$SD | Set-Acl