Centrum Skryptów - Active Directory

Jak dodać grupę domeny do grupy lokalnej?

Udostępnij na: Facebook

Skrypciarze odpowiadają na Wasze pytania

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 dodać grupę domeny do grupy lokalnej?

Cześć, Skrypciarze! Jak dodać grupę domeny do grupy lokalnej?

-- DR

Cześć, DR! Wszyscy od rana zasypują nas pytaniami, pomijając fakt, że może i my mielibyśmy jakieś pytanie. Na przykład: „skąd wytrzasnąć 5 milionów dolarów”? Nie, nie chodzi o grant na rozwinięcie śmiesznych kroków, myślałem raczej, żeby wykupić program telewizyjny z prognozą pogody (bo ponoć jest na sprzedaż) i żeby może w końcu umieszczać tam prognozę pogody, w której do słów takich jak „słońce” czy „słonecznie” nie ma na stałe przyczepionego słowa „nie”. Taka pozytywna prognoza pogody, a skoro i tak prognoza nigdy się nie sprawdza, to ta dawała by nam chociaż pozytywne uczucie i nadzieję, nawet jeśli tylko na parę minut dziennie. Wczoraj, gdy oglądałem Monty Pyhtona, przyszedł mi na myśl jeszcze jeden pomysł – moglibyśmy umieszczać tam programy, w których: kłócilibyśmy się z gośćmi, osobne, w których nabijalibyśmy się z gości, takie, w których obrażalibyśmy gości…

Uwaga od Redakcji: Jak widać Skrypciarz nie interesuje się innymi programami oprócz futbolowych i nigdy nie włączył żadnego politycznego, nie może więc wiedzieć, że programy o których mówi istnieją już od dawna. Czytelników przepraszamy za tak rażącą anegdotę i radzimy nie wysyłać pieniędzy naszemu pracownikowi.

Teraz, na dobry początek dnia, żeby był pozytywny chociaż przez te 5 minut, oto skrypt, dzięki któremu dodamy grupę domeny do grupy lokalnej:

strComputer = "atl-ws-001"



Set objLocalGroup = GetObject("WinNT://" & strComputer & "/TestGroup")

Set objADGroup = GetObject("WinNT://Fabrikam/Finance")



objLocalGroup.Add(objADGroup.ADsPath)

Zanim zaczniemy się rozwodzić, krótka odpowiedź na jakże zawiłe pytanie: „jak dodać grupę domeny do grupy lokalnej?”. Odpowiedź brzmi następująco: tak samo jak dodajemy użytkownika domeny do grupy lokalnej. Problem w tym, że jakoś nikt nie jest w stanie podchwycić od razu prostoty tego mechanizmu i pytanie słyszymy po raz kolejny i (tak, to nawet trochę niegrzeczne w stosunku do nas) w niezmienionej formie. My zatem też odpowiemy w tej samej formie jak powyżej, z tą różnicą, że skupimy się na każdym zagadnieniu trochę dłużej.

Pierwszą rzeczą, jaką musimy zrobić jest określenie nazwy komputera, w którym umieszczona jest dana grupa lokalna i z zapisać ją w zmiennej strComputer:

strComputer = "atl-ws-001"

Gdy mamy to już za sobą, korzystając z metody GetObject i dostawcy WinNT, łączymy się z grupą lokalną, w tym wypadku z grupą TestGroup na komputerze atl-ws-001:

Set objLocalGroup = GetObject("WinNT://" & strComputer & "/TestGroup")

Następny krok wprowadza wiele osób w lekką konsternację. Otóż kiedy łączymy się z obiektem usługi Active Directory (takim jak grupa), korzystamy przeważnie z dostawcy LDAP; to polecenie łączy nas na przykład z grupą Finance Users w domenie fabrikam.com:

Set objGroup = GetObject("LDAP://CN=Finance Users,OU=Finance,dc=fabrikam,dc=com")

Dlaczego? Ponieważ daje to dostęp do mnóstwa atrybutów Active Directory, które można przypisać do obiektu. Jeżeli więc korzystamy z dostawcy WinNT, aby połączyć się z obiektem usługi Active Directory (zakładając oczywiście, że można użyć dostawcy WinNT w celu połączenia się z naszą usługą – nie wszystkie obiekty usługi Active Directory są bowiem dostępne dla dostawcy WinNT), musimy mieć tylko dostęp do kilku atrybutów. Konta użytkowników lokalnych mają na przykład nie więcej niż 20 atrybutów, natomiast konta użytkowników usługi Active Directory mają ich przeważnie ponad 200.

Wszystko pięknie, jest tylko jedna podpucha: jeżeli będziecie próbowali dodać obiekt domeny do grupy lokalnej, to nie można korzystać z dostawcy LDAP w celu połączenia się obiektem domeny (za chwilę wytłumaczymy dlaczego). Dlatego też napisaliśmy wcześniej, że z obiektami usługi Active Directory przeważnie łączymy się za pomocą dostawcy LDAP. Istnieją wyjątki.

Jeżeli natrafimy na taki wyjątek, w celu połączenia się z grupą Active Directory musimy skorzystać z dostawcy WinNT. Oznacza to także, że nasze wartości ADsPath muszą zawierać odniesienie do komputera (lub domeny) w postaci nazwy, po której następuje nazwa grupy lub domeny. Innymi słowy, nasz kod musi wyglądać w następujący sposób:

Set objADGroup = GetObject("WinNT://Fabrikam/Finance")

Wiele osób to konfunduje. Łączą się bowiem z komputerem lokalnym, potem, za pomocą dostawcy LDAP, łączą się również z grupą usługi Active Directory. Jeżeli jednak spróbujemy dodać grupę Active Directory do grupy lokalnej, skrypt nie zadziała. Dlaczego? Ponieważ łącząc się z kontem Active Directory za pomocą dostawcy LDAP otrzymujemy następującą wartość ścieżki ADsPath:

CN=Finance Users,OU=Finance,dc=fabrikam,dc=com

Czy to rzeczywiście takie istotne? Tak, ponieważ atrybut ADsPath jest niezbędny w celu dodania grupy (lub użytkownika) do innej grupy. Menedżer SAM na komputerze lokalnym nie wie, co oznacza ścieżka napisana w stylu Active Directory. CN=Finance Users? OU=Finance? Takie sformułowania są niezrozumiałe dla SAM-a, który na ich widok po prostu sobie odpuszcza.

Na szczęście można obejść ten problem – łącząc się z grupą Active Directory korzystamy z WinNT oraz ścieżki w stylu Windows NT 4.0: domena/nazwa logowania (nazwa logowania jest odpowiednikiem atrybutu sAMAccountName w usłudze Active Directory). Innymi słowy, musimy połączyć się z grupą domeny, używając poniższego wiersza kodu, przy czym Fabrikam to skrócona nazwa domeny fabrikam.com, Finance zaś to nazwa logowania dla grupy Finance Users:

Set objADGroup = GetObject("WinNT://Fabrikam/Finance")

Powinno zadziałać. Teraz musimy już tylko wywołać metodę Add, podając wartość atrybutu ADsPath grupy domeny jako jedynego parametru:

objLocalGroup.Add(objADGroup.ADsPath)

Mamy nadzieję, że choć nazwa „Active Directory” padła tu przynajmniej 150 razy w różnych konfiguracjach, to nasz opis jest choć trochę zrozumiały i przydatny. W następnych artykułach postaramy się korzystać mniej ze słów „dostawca”, „usługa”, „domena” oraz „ścieżka”… Myślę, że trzeba trochę więcej o futbolu.

 Do początku strony Do początku strony

Centrum Skryptów - Active Directory