如何使用 PowerShell 查找 Active Directory Class 的 "Schema-Id-Guid" 和属性的 "System-Id-Guid"
How can I lookup an Active Directory Class's "Schema-Id-Guid" and an Attribute's "System-Id-Guid" using PowerShell
我需要使用 PowerShell 创建一些新的访问控制条目 (ACE) 以委派给特定的 Active Directory OU。
这些规则需要 grant/deny 访问 "Computer" 对象上的 "NT AUTHORITY\SELF" 用户帐户的特定属性。
我正在使用 System.DirectoryServices.ActiveDirectoryAccessRule .NET class 创建 ACE。 The constructor that I require to create this object 需要所需属性和 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 AUTHORITY\SELF" 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
以上代码示例允许读取和写入计算机 class 上的网络地址属性。引用的GUID如下:
Network-Address: System-Id-Guid bf9679d9-0de6-11d0-a285-00aa003049e2
Computer: Schema-Id-Guid bf967a86-0de6-11d0-a285-00aa003049e2
我遇到的唯一问题是我必须手动查找所需属性和 Class 的 GUID。
所以我的问题是:
有谁知道仅使用 CN 或 Ldap-Display-Name 查找这些 GUID 的方法吗?
Link 答案由 Theo 提供。
我会 copy/paste Mathias R. Jessen 的回答:
您可以从架构中检索属性的 GUID:
- 查询 attributeSchema 对象的 schemaNamingContext
- 在 ldapDisplayName 上过滤,GUI 显示的属性名称
- 获取 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]
我需要使用 PowerShell 创建一些新的访问控制条目 (ACE) 以委派给特定的 Active Directory OU。
这些规则需要 grant/deny 访问 "Computer" 对象上的 "NT AUTHORITY\SELF" 用户帐户的特定属性。
我正在使用 System.DirectoryServices.ActiveDirectoryAccessRule .NET class 创建 ACE。 The constructor that I require to create this object 需要所需属性和 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 AUTHORITY\SELF" 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
以上代码示例允许读取和写入计算机 class 上的网络地址属性。引用的GUID如下:
Network-Address: System-Id-Guid bf9679d9-0de6-11d0-a285-00aa003049e2
Computer: Schema-Id-Guid bf967a86-0de6-11d0-a285-00aa003049e2
我遇到的唯一问题是我必须手动查找所需属性和 Class 的 GUID。
所以我的问题是:
有谁知道仅使用 CN 或 Ldap-Display-Name 查找这些 GUID 的方法吗?
Link 答案由 Theo 提供。
我会 copy/paste Mathias R. Jessen 的回答:
您可以从架构中检索属性的 GUID:
- 查询 attributeSchema 对象的 schemaNamingContext
- 在 ldapDisplayName 上过滤,GUI 显示的属性名称
- 获取 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]