Centrum skryptów - Systemy operacyjne

Jak utworzyć listę wszystkich grup w domenie Windows NT 4.0?

Udostępnij na: Facebook

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.

Jak utworzyć listę wszystkich grup w domenie Windows NT 4.0?

Cześć Skrypciarze! Pytanie

Cześć, Skrypciarze! Jak utworzyć listę wszystkich grup w domenie Windows NT 4.0?

-- MN

Cześć Skrypciarze! Odpowiedź

Cześć, MN. W Stanach mamy Dzień Martina Luthera Kinga, więc można by się spodziewać, że Skrypciarz piszący te słowa zacznie od opowiedzenia o nim anegdoty, nie mającej związku ze skryptami. Okazuje się jednak, że Skrypciarz, chociaż dobrze zaznajomiony z historią ruchu praw obywatelskich, nie ma w zanadrzu anegdot o Martinie Lutherze Kingu. Ale nie martwcie się – Skrypciarz zna mnóstwo anegdot o Marcinie Lutrze, inicjatorze ruchu protestanckiego.

Może to nie to samo, ale jednak blisko, no nie? W końcu bez takich anegdot cała rubryka Cześć Skrypciarze! musiałaby zostać poświęcona skryptom. Odrażające!

Koniec z bezsensownym gadaniem, przejdźmy do sedna sprawy – anegdot. Otóż jednym z najbardziej znanych cytatów z Lutra jest jego okrzyk na sejmie w Wormacji w 1521 r.: „Tu stoję! Nie mogę inaczej!”. Co w tym ciekawego? Otóż najprawdopodobniej Luter wcale tego nie powiedział; okrzyk ten został mu przypisany przez któregoś z późniejszych biografów.

Miejmy nadzieję, że w przyszłości jakiś biograf o podobnej konstrukcji psychicznej zredaguje artykuły Cześć, Skrypciarzu! i dołączy do nich tego rodzaju wiekopomne cytaty.

Teraz, skoro mamy już z głowy anegdoty, możemy skoncentrować się na utworzeniu listy wszystkich grup w domenie Windows NT 4.0. Trudno uwierzyć, ale nie zajęliśmy się tym problemem w żadnym z niemal 700 artykułów Cześć, Skrypciarzu! No cóż, oto nasz skrypt:

strDomain = "fabrikam"



Set colGroups = GetObject("WinNT://" & strDomain & "")

colGroups.Filter = Array("group")



For Each objGroup In colGroups

    Wscript.Echo objGroup.Name 

Next

Gdybyśmy przypuszczali, że będzie to aż tak łatwe, to do dziś mielibyśmy ze sto takich list!

Jak widać, skrypt jest tak prosty, że prawie sam się pisze. Najpierw przyporządkowujemy nazwę domeny (fabrikam) zmiennej strDomain. Następnie używamy providera WinNT, dzięki któremu łączymy się z domeną. Zwróćmy uwagę na duże i małe znaki – nazwy providerów ADSI rozróżniają wielkość znaków, więc wpisanie np. WINNT spowoduje, że skrypt nie zadziała.

Połączenie z domeną daje nam kolekcję wszystkich znajdujących się w niej obiektów – użytkowników, grup, drukarek i całej reszty. Ponieważ interesują nas tylko grupy, użyjemy odpowiedniego filtra (Filter):

colGroups.Filter = Array("group")

Musimy tu użyć tablicy, mimo że filtrujemy tylko jedną wartość (group). Jak na taki mały skrypt, mnóstwo tu szczególików, na które trzeba bardzo uważać.

Teraz uruchamiamy pętlę For Each, która przejdzie przez całą kolekcję i wyświetli na ekranie nazwy (właściwość Name) grup:

For Each objGroup In colGroups

    Wscript.Echo objGroup.Name 

Next

Coś jeszcze? Ach tak, skoro mamy już listę grup, to może warto zobaczyć, kto do nich należy. Zobaczmy więc:

strDomain = "fabrikam"



Set colGroups = GetObject("WinNT://" & strDomain & "")

colGroups.Filter = Array("group")



For Each objGroup In colGroups

    Wscript.Echo objGroup.Name 

    For Each objUser in objGroup.Members

        Wscript.Echo objUser.Name

    Next

    Wscript.Echo

Next

A oto kolejny bonus: taki sam skrypt, niemal bez zmian, może nam posłużyć do pobierania informacji o grupach lokalnych. Wystarczy, że zmiennej strDomain przypiszemy nazwę komputera. Chociaż zgrabniej będzie, jeśli w takim razie zmienną tę nazwiemy strComputer:

strComputer = "atl-fs-01"



Set colGroups = GetObject("WinNT://" & strComputer & "")

colGroups.Filter = Array("group")



For Each objGroup In colGroups

    Wscript.Echo objGroup.Name 

    For Each objUser in objGroup.Members

        Wscript.Echo objUser.Name

    Next

    Wscript.Echo

Next

I gotowe.

 Do początku strony Do początku strony

Centrum skryptów - Systemy operacyjne