Az AD Schema vizsgálata

Az Active Directory sémája sok hasznos információt szolgáltathat számunkra, ha tudjuk, hogyan kezeljük az ott található információkat. Például nem is olyan egyszerű felderíteni, hogy egy felhasználónak milyen attribútumokat is definiálhatunk. Ez azért problematikus, mert nem csak azok az attribútumok vannak, amelyek közvetlenül az adott objektumtípusnál vannak definiálva, hanem a kiegészítő objektumoknál definiáltakkal is. Hogy jobban érthető legyen, nézzük mindezt a grafikus felületen:

125 . ábra Felhasználó AD attribútumai

A fenti ábrán Budai Máriának van msExchAssistantName attribútuma, de vajon ez honnan jön? Ha a sémakezelő eszközt nézzük, akkor ott látszólag nincs ilyen:

126 . ábra Látszólag nincs msExchAssistantName attribútum

De valójában ehhez hozzá jön a kiegészítő osztályokban definiált attribútumok listája is, azaz ezek között is szét kell nézni. Ismét a sémakezelőből idézek, nézzük a user osztály tulajdonságlapját:

127 . ábra A kiegészítő osztályok listája

Ez így elég hosszadalmas folyamat, de erre való a PowerShell! Az ezt megvalósító kód az alább látható:

$syntaxhash = @{

'2.5.5.8-1' =   'Boolean'

'2.5.5.9-2' =   'Integer'

'2.5.5.10-4' =  'String(Octet)'

'2.5.5.17-4' =  'String(Sid)'

'2.5.5.2-6' =   'String(Object-Identifier)'

'2.5.5.9-10' =  'Enumeration'

'2.5.5.6-18' =  'String(Numeric)'

'2.5.5.5-19' =  'String(Printable)'

'2.5.5.4-20' =  'CaseIgnoreString(Teletex)'

'2.5.5.5-22' =  'String(IA5)'

'2.5.5.11-23' = 'String(UTC-Time)'

'2.5.5.11-24' = 'String(Generalized-Time)'

'2.5.5.3-27' =  'Case-Sensitive String'

'2.5.5.12-64' = 'String(Unicode)'

'2.5.5.16-65' = 'LargeInteger'

'2.5.5.15-66' = 'String(NT-Sec-Desc)'

'2.5.5.1-127' = 'Object(DN-DN)'

'2.5.5.7-127' = 'Object(DN-Binary)'

'2.5.5.13-127' = 'Object(Presentation-Address)'

'2.5.5.14-127' = 'Object(DN-String)'

'2.5.5.0-' =    'Undefined'

}

 

filter get-systemAuxiliaryClass

{

    $ado = Get-ADObject -Properties maycontain, systemmaycontain, systemAuxiliaryClass -Filter {

          objectClass -eq 'ClassSchema' -and lDAPDisplayName -eq $_} `

        -SearchBase ((Get-ADForest).partitionscontainer -replace "partitions","schema")

    if($ado.systemAuxiliaryClass){

        $ado.systemAuxiliaryClass | get-systemAuxiliaryClass

    }

    $ado

}

 

"user" | get-systemAuxiliaryClass | %{

    $_.maycontain, $_.systemmaycontain

} | %{$_} | %{

    Get-ADObject -Properties * -Filter {objectClass -eq 'attributeSchema' -and lDAPDisplayName -eq $_} `

          -SearchBase ((Get-ADForest).partitionscontainer -replace "partitions","schema")

} | select-object name, @{n="syntax";e={$syntaxhash.($_.attributesyntax +"-"+$_.oMSyntax)}},

     ismemberofpartialattributeset, issinglevalued | Sort-Object -Property name | ft -AutoSize

Ebben definiálok egy függvényt, ami rekurzívan végiglépked a kiegészítő osztályok listáján, majd ezekre mind kikeresem a megfelelő attribútumlistát. Hogy még teljesebb legyen a kimenet, ezért még hozzáteszem az adott attribútumelem sémában definiált szintaxisát. A végső kimenet valami ilyesmi lesz:

name                syntax              ismemberofpartialat     issinglevalued

                                        tributeset

----                ------              -------------------     --------------

Account-Expires     LargeInteger                                          True

Account-Name-Histor String(Unicode)                                      False

y

ACS-Policy-Name     String(Unicode)                                       True

Address-Home        String(Unicode)                                       True

Admin-Count         Integer                                               True

Alt-Security-Identi String(Unicode)     True                             False

ties

Ezzel teljes mértékben fel tudjuk térképezni a különböző AD objektumtípusok attribútumait.



Word To HTML Converter