Получить все атрибуты в редакторе атрибутов в свойствах пользователя AD - PullRequest
1 голос
/ 17 июня 2019

Мне нужно получить все атрибуты, перечисленные в редакторе атрибутов ( Редактор атрибутов ) при просмотре свойств пользователя AD (~ 300 атрибутов) с использованием C # или Power Shell.

Я пытался запросить пользователя схемы, но не получил достаточно атрибутов.

Get-ADObject -SearchBase (Get-ADRootDSE).SchemaNamingContext -Filter {name -like "User"} -Properties MayContain,SystemMayContain |
Select-Object @{n="Attributes";e={$_.maycontain + $_.systemmaycontain}} | 
Select-Object -ExpandProperty Attributes |
Sort-Object

Пожалуйста, помогите. Спасибо.

Ответы [ 2 ]

0 голосов
/ 17 июня 2019

Хотя при проверке схемы вы получаете множество атрибутов, существуют также атрибуты (systemFlags), которые не определены в схеме, но рассчитываются по запросу.

Следующая функция должна получить все это:

function Get-AllADUserAttributes {
    # First, get all AD user attributes defined in the Active Directory schema
    $searchBase    = (Get-ADRootDSE).SchemaNamingContext
    $schemaAttribs = Get-ADObject -SearchBase $searchBase -Filter {name -like "User"} -Properties MayContain,SystemMayContain |
                     Select-Object @{Name = 'Attributes'; Expression = {$_.maycontain + $_.systemmaycontain}} |
                     Select-Object -ExpandProperty Attributes

    # Next, get all created user attributes. These are not defined in the schema, but calculated when asked for
    $flagsAttribs = Get-ADObject -SearchBase $searchBase -ldapfilter '(systemFlags:1.2.840.113556.1.4.803:=4)' -Properties systemFlags |
                    Select-Object -ExpandProperty Name

    return ($schemaAttribs + $flagsAttribs) | Sort-Object
}
0 голосов
/ 17 июня 2019

Следующая «рекурсивная» функция должна работать.Он учитывает наследование атрибутов от родительских классов.

function Get-AllAttributes {
    Param($class)

    $temp = get-adobject -searchbase (get-adrootdse).schemanamingcontext -filter "ldapdisplayname -eq '$class'" -Properties SystemMayContain,subClassOf,ldapdisplayname,MayContain
    $temp.systemMayContain
    $temp.MayContain
    while($temp.subClassOf -and $temp.ldapdisplayname -ne $temp.subClassOf) {
        $temp = get-adobject -searchbase (get-adrootdse).schemanamingcontext -filter "ldapdisplayname -eq '$($temp.subClassOf)'" -Properties SystemMayContain,subClassOf,ldapdisplayname,MayContain
        $temp.systemMayContain
        $temp.MayContain
    }
}

Get-AllAttributes 'user'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...