Centrum Skryptów - Active Directory

W jaki sposób można sporządzić listę wszystkich atrybutów używanych w klasie komputerów w Active Directory? Udostępnij na: Facebook

Skrypciarze odpowiadają na Wasze pytania

Cześć Skrypciarze!

Witamy w rubryce TechNet, w której Skrypciarze z firmy Microsoft odpowiadają na częste pytania dotyczące używania skryptów w administracji systemu. Jeśli macie jakieś pytania z tej dziedziny, zachęcamy do wysłania e-maila na adres: scripter@microsoft.com. Nie możemy zagwarantować odpowiedzi na każde otrzymane pytanie, ale staramy się jak możemy.

W jaki sposób można sporządzić listę wszystkich atrybutów używanych w klasie komputerów w Active Directory?

Cześć, Skrypciarzu! W jaki sposób sporządzić listę wszystkich atrybutów używanych w klasie komputerów w Active Directory?

-- Katarzyna

Cześć, Katarzyno. Dzięki za pytanie. Już odpowiadamy: tak, to prawda, że drużyna baseballowa Kirkland Fire z Colt League, której trenerem jest jeden ze Skrypciarzy, wygrała kolejny mecz w zeszły weekend, we wspaniałym stylu kończąc mistrzostwa miasta, w których zwycięstwo mieliśmy już wcześniej zagwarantowane w punktach. A wynik tego ostatniego meczu to naprawdę 13:0. W czymś jeszcze możemy pomóc?

Aha, racja, jest jeszcze to pytanie o skrypty. (Jeśli ktoś nie wie, o co chodzi: skrypty to coś, czym zajmujemy się w czasie wolnym od baseballa.) Oczywiście jeden z nas jest nieszczególnie skoncentrowany na swojej pracy (chociaż właściwie to nie wiem, czemu dziś miałoby być inaczej niż zwykle), ale Twoje pytanie jest na szczęście dość proste: w końcu jedną z fajniejszych cech ADSI (technologii skryptów używanej do komunikacji z Active Directory) jest to, że można napisać skrypt ADSI, wyliczający, do czego można zastosować skrypty ADSI. I tak, poniższy skrypt spowoduje wyświetlenie nazw wszystkich atrybutów (właściwości) używanych przez klasę Computer:

Set objSchema = GetObject("LDAP://schema/computer") Wscript.Echo "Mandatory attributes" For Each strAttribute in objSchema.MandatoryProperties Wscript.Echo strAttribute Next Wscript.Echo Wscript.Echo "Optional attributes" For Each strAttribute in objSchema.OptionalProperties Wscript.Echo strAttribute Next 

Set objSchema = GetObject("LDAP://schema/computer")

 

Wscript.Echo "Mandatory attributes"



For Each strAttribute in objSchema.MandatoryProperties

    Wscript.Echo strAttribute

Next

 

Wscript.Echo



Wscript.Echo "Optional attributes"



For Each strAttribute in objSchema.OptionalProperties

    Wscript.Echo strAttribute

Next

Najpierw łączymy się tu ze schematem lokalnej domeny, a następnie z klasą Computer. (Schemat to rzecz jasna główna lista w której wyliczone są wszystkie klasy i inne obiekty, jakie można przechować w Active Directory, oraz wszystkie właściwości i metody charakterystyczne dla tych obiektów.) Teraz wracamy do wystąpienia obiektu IADsClass; jak nazwa wskazuje, IADsClass zawiera informacje o określonej klasie Active Directory. Co by było, gdybyśmy chcieli uzyskać informacje o klasie User? Połączylibyśmy się z nią, a nie z klasą Computer:

Set objSchema = GetObject("LDAP://schema/user")

W celu uzyskania informacji o klasie organizationalUnit, zastosowalibyśmy taki kod:

Set objSchema = GetObject("LDAP://schema/organizationalUnit")

Ponieważ IADsClass jest klasą, posiada własny zestaw atrybutów, w tym następujące dwa: MandatoryProperties i OptionalProperties. Atrybut MandatoryProperties oznacza właściwości, jakie musi posiadać każde wystąpienie interesującej nas klasy (w tym wypadku chodzi o klasę Computer). Stosując skrypt do Active Directory, uzyskamy następującą listę obowiązkowych właściwości:

cn

instanceType

nTSecurityDescriptor

objectCategory

objectClass

objectSid

sAMAccountName

Większość z tych właściwości nadawana jest automatycznie przez Active Directory, ale niektóre, np. cn i sAMAccountName – nie. Oznacza to, że tworząc nowy obiekt klasy Computer trzeba samemu nadać tym właściwościom wartości; pomijając, dajmy na to, sAMAccountName, sprawimy, że skrypt nie zadziała.

Jak się można spodziewać, wartość atrybutu MandatoryProperties przechowywana jest jako tablica (ponieważ może ich być więcej niż jedna – i tak właśnie będzie); używamy więc pętli For Each przechodzącej przez wszystkie właściwości i wywołujemy echo ich nazw:

For Each strAttribute in objSchema.MandatoryProperties

    Wscript.Echo strAttribute

Next

I to już mniej-więcej na tyle. Tak samo postępujemy z atrybutem OptionalProperties (oznaczającym właściwości, jakie mogą, ale nie muszą się pojawić) i już gotowe.

Przy okazji: niektóre z opcjonalnych właściwości komputera są dosyć dziwaczne: pager, numer telefonu domowego itp. Może ciężko w to uwierzyć, ale to nic niezwykłego: klasa Computer wywodzi się z klasy User. Oznacza to, że ma ona wszystkie właściwości klasy User i jeszcze kilka dodatkowych – np. wersję systemu operacyjnego. Jeśli natraficie więc na coś kuriozalnego (jak inicjały czy nazwisko sekretarki), nie martwcie się. W końcu idea właściwości opcjonalnych jest taka, że nie trzeba mieć z nimi w ogóle do czynienia, jeśli się nie chce.

Mamy nadzieję, Katarzyno, że rozwiązaliśmy twój problem. Teraz możemy kontynuować opowieść o zespole Kirkland Fire. A zatem… gdzie się wszyscy podziali?!

 Do początku strony Do początku strony


Centrum Skryptów - Active Directory