如何使用 PowerShell 查找 Active Directory 类的"Schema-Id-Guid"和属性的"System-Id-Guid"



我需要创建一些新的访问控制项(ACE),以便使用PowerShell委派给特定的Active Directory OU。

这些规则需要授予/拒绝对"Computer"对象上的"NT AUTHORITY\SELF"用户帐户的特定属性的访问。

我正在使用System.DirectoryServices.ActiveDirectoryAccessRule.NET类创建ACE。创建此对象所需的构造函数需要所需的Attribute和Class的GUID。

我现在可以使用我写的以下PowerShell代码创建这个规则:

# Get the security descriptor for the desired OU
$ouPath = "AD:\OU=TestOU,DC=example,DC=com"
$acl = Get-Acl $ouPath
# Get the SID of the "NT AUTHORITYSELF" user account
$account = [System.Security.Principal.NTAccount]::New("NT AUTHORITY", "SELF")
$accountSID = $account.Translate([System.Security.Principal.SecurityIdentifier])
# Property values for ActiveDirectoryAccessRule
$identity = [System.Security.Principal.IdentityReference]$accountSID
$adRights = [System.DirectoryServices.ActiveDirectoryRights]("ReadProperty, WriteProperty")
$type = [System.Security.AccessControl.AccessControlType]("Allow")
$objectType = [System.Guid]::New("bf9679d9-0de6-11d0-a285-00aa003049e2")
$inheritanceType = [System.DirectoryServices.ActiveDirectorySecurityInheritance]("Descendents")
$inheritedObjectType = [System.Guid]::New("bf967a86-0de6-11d0-a285-00aa003049e2")
# Create the new rule object
$ace = [System.DirectoryServices.ActiveDirectoryAccessRule]::New($identity, $adRights, $type, $objectType, $inheritanceType, $inheritedObjectType)
# Add the rule to the ACL
$acl.AddAccessRule($ace)
# Change the security descriptor
Set-Acl -AclObject $acl $ouPath

上面的代码示例允许读取和写入Computer类上的"网络地址"属性。参考的GUID如下:

网络地址:系统Id Guidbf9679d9-0de6-11d0-a285-00aa003049e2

计算机:架构Id Guidbf967a86-0de6-11d0-a285-00aa003049e2

我遇到的唯一问题是,我必须手动查找所需属性和类的GUID。

所以我的问题是:

有人知道只使用CN或Ldap显示名称查找这些GUID的方法吗

Theo提供了答案链接。

获取属性guid

我将复制/粘贴Mathias R.Jessen的答案:

您可以从架构检索属性的GUID:

  1. 查询schemaNamingContext以查找attributeSchema对象
  2. 过滤ldapDisplayName,GUI显示的属性名称
  3. 获取schemaIDGUID属性值并在ACE中使用该值

为了简单起见,我将在这里使用RSAT-ActiveDirectory模块,但您可以使用任何ldap客户端:

$attrSchemaParams = @{
SearchBase = (Get-ADRootDSE).schemaNamingContext
Filter = "ldapDisplayName -eq 'pwmEventLog' -and objectClass -eq 'attributeSchema'"
Properties = 'schemaIDGUID'
}
$pwmEventLogSchema = Get-ADObject @attrSchemaParams
$pwmEventLogGUID = $pwmEventLogSchema.schemaIDGuid -as [guid]

最新更新