在活动目录中创建的计算机对象上设置'Following user or group can join to domain'权限



我有一个 VMWare View 环境,我们通常必须偶尔通过大量计算机来扩展池。

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

我正在尝试通过PowerShell脚本将计算机添加到Active Directory来自动化此操作。 我有脚本工作,它添加了计算机对象,但我没有找到在创建计算机对象或创建后修改权限时设置这些权限的明显方法。

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

两个链接:

上次在这里问过这个问题

脚本专家论坛

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

另一种选择是拥有 View 的服务帐户,该帐户位于 GPO 受限域加入者组中。 然后,您可以限制域用户帐户加入域,只需拥有服务帐户和支持技术人员即可。 服务帐户将使用"添加计算机"自动添加它创建的每个 VM。

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

离开另一个答案中的链接,您需要授予以下四件事:

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

您需要四个单独的 ACE 才能执行此操作。以下代码片段演示如何执行此操作,但它假定你具有 AD cmdlet,并且你想要将 ACE 应用于每个计算机对象。可以将这些 ACE 应用于计算机对象将继承的 OU,但需要更改继承和(可选)继承对象类型 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

相关内容

最新更新