Centrum skryptów - Active Directory

Jak sprawdzić identyfikator GUID konta użytkownika, jeżeli posiadam tylko login oraz nazwę domeny?

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.

Jak sprawdzić identyfikator GUID konta użytkownika, jeżeli posiadam tylko login oraz nazwę domeny?

Cześć Skrypciarze! Pytanie

Cześć, Skrypciarze! Jak zdobyć identyfikator GUID dla konta użytkownika, o którym jedyne co wiem, to jego login oraz domena?

-- IU

Cześć Skrypciarze! Odpowiedź

Cześć, IU. Najlepsze w skrypciarzu piszącym te artykuły jest.... tak z głowy nie wymyślę, chociaż chciałem zacząć pompatycznie i inteligentnie. No, ale widocznie za dużo rzeczy robię wyśmienicie i dlatego mam takie problemy z wymienieniem akurat tej jednej, najlepszej. (Mam przy tym nadzieję, że może skrypciarska Pani Redaktor będzie chciała zamieścić tu krótką listę zalet autora...) Może rzeczywiście nie jestem dobry w wymienianiu listy własnych zalet, ale na pewno lubię przechodzić od razu do sedna sprawy. Drogi IU, sednem tym jest fakt, że mamy tu do czynienia z małym problemem tłumaczeniowym, ponieważ nazwa domeny zapisana jest w konwencji Windows NT (na przykład: fabrikam\kenmyer), a my potrzebujemy przetłumaczyć ją na identyfikator GUID użytkownika (na przykład: {97614339-087d-4f26-9fc5-86e8e7425ce7}). Teraz decydujące pytanie: co należy zrobić, jeżeli chcemy przetłumaczyć A na B? Właśnie! Użyć słownika tudzież tłumacza!

Tylko, że to nie takie proste – nie da się po prostu przetłumaczyć nazwy domeny systemu Windows NT 4. Czy da się? Spójrzcie poniżej:

Const ADS_NAME_INITTYPE_GC = 3

Const ADS_NAME_TYPE_NT4 = 3

Const ADS_NAME_TYPE_GUID = 7



strUserName = "fabrikam\kenmyer"



Set objTranslator = CreateObject("NameTranslate")



objTranslator.Init ADS_NAME_INITTYPE_GC, ""

objTranslator.Set ADS_NAME_TYPE_NT4, strUserName



strUserGUID = objTranslator.Get(ADS_NAME_TYPE_GUID)



Wscript.Echo strUserGUID

Musimy przyznać, że powyższy skrypt dal nam sporo uciechy, mogliśmy bowiem użyć w końcu funkcji IADsNameTranslate (j.ang.), interfejsu ADSI wbudowanego w system operacyjny. Jak sama nazwa wskazuje, interfejs IADsNameTranslate jest w stanie przetłumaczyć wiele nazw w usłudze Active Directory. Wystarczy podać funkcji IADsNameTranslate jakąś nazwę wyróżniającą i otrzymamy jej wartość display name, jeżeli zaś podamy funkcji IADsNameTranslate nazwę kanoniczną, to możemy otrzymać jej wartość jako nazwę UPN. W końcu, jeżeli podać naszej funkcji IADsNameTranslate nazwę domeny systemu Windows NT, to możemy otrzymać poszukiwany przez nas identyfikator GUID.

Mamy przynajmniej taką nadzieję.

Nasz skrypt zaczyna się od zdefiniowania trzech stałych:

  • ADS_NAME_INITTYPE_GC (o wartości 3) instruuje skrypt o tym, że chcemy sprawdzić informacje kontaktując się z serwerem katalogu globalnego.
  • ADS_NAME_TYPE_NT4 (również o wartości 3) określa nazwę domeny NT 4.
  • ADS_NAME_TYPE_GUID (o wartości 7) określa identyfikator GUID w usłudze Active Directory.

Po zdefiniowaniu tych stałych przypisujemy nazwę użytkownika do zmiennej strUserName, zwracając szczególna uwagę na to, by podać ją w konwencji domain\user name:

strUserName = "fabrikam\kenmyer"

Tworzymy następnie wystąpienie obiektu NameTranslate , identyfikatora ProgID dla interfejsu IADsNameTranslate. Przywołujemy potem metodę Init, która łączy nas z usługą Active Directory; w tym przypadku łączy nas ona z serwerem katalogu globalnego, ponieważ podaliśmy stałą ADS_NAME_INITTYPE_GC jako parametr metody. (Zwróćcie uwagę, ze drugim parametrem był tu pusty ciąg znaków – dzięki niemu możemy określić nazwę komputera lub domeny. Nie potrzebujemy tego robić, jeżeli łączymy się serwerem katalogu globalnego, ale musimy, jeżeli pusty ciąg znaków będzie u nas parametrem opcjonalnym, w przeciwnym bowiem razie nasz skrypt nie będzie działał).

To, co nazywamy metodą Init, wygląda w następujący sposób:

objTranslator.Init ADS_NAME_INITTYPE_GC, ""

W taki zaś sposób wygląda u nas metoda Set:

objTranslator.Set ADS_NAME_TYPE_NT4, strUserName

Jak sami widzicie, Set ma u nas dwa parametry: nazwę usługi Active Directory, którą trzeba przetłumaczyć (zawarta w stałej ADS_NAME_TYPE_NT4) oraz samą nazwę (zawarta w zmiennej strUserName). Po wywołaniu metody Set, przywołujemy metodę Get. Co chcemy otrzymać? Prosta sprawa: chcemy otrzymać identyfikator GUID użytkownika, coś, co wskazujemy przez podanie stałej ADS_NAME_TYPE_GUID. Obiekt NameTranslate pobierze identyfikator GUID i przechowa go w zmiennej o nazwie strUserGUID:

strUserGUID = objTranslator.Get(ADS_NAME_TYPE_GUID)

Czy zatem nasz skrypt zadziała? Oczywiście, że tak. Oto, co widzimy, jeżeli wywołamy echo wartości strUserGUID:

{97614339-087d-4f26-9fc5-86e8e7425ce7}

Super, co nie?

Oto lista innych formatów nazw, z którymi można również pracować:

StałaWartośćOpis
ADS_NAME_TYPE_17791Format Name, jak w RFC 1779. Na przykład: „CN=Jeff Smith,CN=users,DC=Fabrikam,DC=com”.
ADS_NAME_TYPE_CANONICAL2Format nazwy kanonicznej, na przyklad: „Fabrikam.com/Users/Jeff Smith”.
ADS_NAME_TYPE_NT43Format nazwy konta dla systemu Windows NT 4.0, na przykład: „Fabrikam\JeffSmith”.
ADS_NAME_TYPE_DISPLAY4Format Dispaly name, na przykład: „Jeff Smith”.
ADS_NAME_TYPE_DOMAIN_SIMPLE5Prosty format nazwy domeny, na przykład: „JeffSmith@Fabrikam.com”.
ADS_NAME_TYPE_ENTERPRISE_SIMPLE6Prosty format nazwy przedsiębiorstwa, na przykład: „JeffSmith@Fabrikam.com”.
ADS_NAME_TYPE_GUID7Format identyfikatora GIUD, na przykład: „{95ee9fff-3436-11d1-b2b0-d15ae3ac8436}”.
ADS_NAME_TYPE_USER_PRINCIPAL_NAME9Format głównej nazwy użytkownika, na przykład: „JeffSmith@Fabrikam.com”.
ADS_NAME_TYPE_CANONICAL_EX10Rozszerzony format nazwy kanonicznej, na przykład: „Fabrikam.com/Users Jeff Smith”.
ADS_NAME_TYPE_SERVICE_PRINCIPAL_NAME11Format głównej nazwy usługi, na przykład: „www/www.fabrikam.com@fabrikam.com”.

Spróbujcie użyć któregoś z powyższych i zobaczcie, co się stanie. Nie omówiliśmy tu za wnikliwie interfejsu IADsNameTranslate, ale nic tak naprawdę bardziej wnikliwego nie trzeba o nim wiedzieć więcej. Omawiane tu podejście jest o wiele szybsze i mniej skomplikowane niż skrypt poszukiwania w usłudze Active Directory, co może również być alternatywą dla wyszukiwania użytkowników i uzyskiwania ich identyfikatorów GUID.

Mamy nadzieję, IU, że pomogliśmy Ci w Twoim problemie tłumaczeniowym, szczególnie teraz bowiem, po pobycie we Włoszech, stałem się specem od wszelkich problemów i porad tłumaczeniowych. Oczywiście głównym specem od problemów tłumaczeniowych przy zamawianiu pizzy lub spaghetti, lub kawy o 158266368263 uroczych nazwach, w zależności od minimalnych zmian zawartości...

 Do początku strony Do początku strony

Centrum skryptów - Active Directory