Centrum skryptów - Systemy operacyjne

Jak mogę uzyskać pełną nazwę użytkownika Windows NT 4.0, jeżeli znam tylko jego login?

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 mogę uzyskać pełną nazwę użytkownika Windows NT 4.0, jeżeli znam tylko jego login?

Cześć Skrypciarze! Pytanie

Cześć, Skrypciarze! Jak mogę uzyskać pełną nazwę użytkownika Windows NT 4.0, jeżeli znam tylko jego login?

-- NH

Cześć Skrypciarze! Odpowiedź

Cześć, NH. Jest rzeczą oczywistą, że nikt nie lubi, kiedy coś mu się nie udaje, albo kiedy inni robią coś lepiej od nas, lub też kiedy nagle stajemy się tak bezsilni wobec jakiegoś stanu rzeczy, że aż nam się chce płakać.

Naprawdę nie chciałbym, żebyście znaleźli się w takiej sytuacji i dlatego, aby uniknąć widoku waszej rozpaczy podaję wam skrypt, który określa pełną nazwę użytkownika (Ken Myer) w sytuacji, gdy jedyne czym dysponujemy, to jego login. (kenmyer):

strDomain = "fabrikam"

strUserName = "kenmyer"



Set objUser = GetObject("WinNT://" & strDomain & "/" & strUserName)

Wscript.Echo objUser.FullName

Tak, to naprawdę bardzo prosty i krótki skrypt. Na początek, po prostu przypisujemy wartości do par zmiennych: zmienna strDomain otrzymuje nazwę naszej domeny, a zmienna strUserName login naszego użytkownika. Następnie za pomocą poniższego wiersza kodu łączymy się bezpośrednio z kontem użytkownika w domenie NT 4.0:

Set objUser = GetObject("WinNT://" & strDomain & "/" & strUserName)

Kiedy już uzyskamy połączenie, stosujemy jeszcze jeden wiersz kodu w celu uzyskania pełnej nazwy użytkownika – FullName:

Wscript.Echo objUser.FullName

I to już wszystko. Tylko tyle należy zrobić.

Należy przy tym zauważyć, że w ramach bonusu, tego samego skryptu można użyć do wyszukania pełnej nazwy lokalnego użytkownika. W tym wypadku należy połączyć się z menedżerem SAM (security account manager) na komputerze, a nie w domenie. Jest to tak naprawdę skrypt bardzo podobny do tego, który właśnie omówiliśmy, chociaż nieznacznie zmieniony, by mógł współpracować z kontami lokalnych użytkowników:

strComputer = "fabrikam"

strUserName = "kenmyer"



Set objUser = GetObject("WinNT://" & strComputer & "/" & strUserName)

Wscript.Echo objUser.FullName

Czyż nie wygląda on podobnie? Jedyna dokonana w nim zmiana polegała na zastąpieniu nazwy zmiennej strDomain nazwą strComputer.

Skoro już jesteśmy przy tym temacie, można zadać podobne pytanie, a mianowicie: Czy posiadając jedynie pełną nazwę użytkownika, możliwe jest uzyskanie jego loginu?

Zatem jak uzyskać login użytkownika posiadając jedynie jego nazwę? Cóż, gdybyśmy mieli do czynienia z domeną Active Directory, odpowiedź byłaby oczywista: należałoby wyszukać w niej odpowiedni obiekt ADO. Niestety, nie można wyszukać kont użytkownika w domenie NT 4.0, ani w lokalnym SAM. Na szczęście jednak, nie oznacza to, że zlokalizowanie użytkownika nie jest możliwe. Oznacza to jedynie, że należy wykonać poniższą procedurę:

strDomain = "fabrikam"



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

colAccounts.Filter = Array("user")



For Each objUser In colAccounts

    If objUser.FullName = "Ken Myer" Then

        Wscript.Echo objUser.Name 

        Exit For

    End If  

Next

Po pierwsze, musimy połączyć się z samą domeną; zwróćmy uwagę, że w ciągu znaków odpowiedzialnym za połączenie nie podajemy konta użytkownika:

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

Po uzyskaniu połączenia, ustawiamy właściwości filtra – Filter na user, dzięki czemu nasza kolekcja będzie zawierała tylko konta użytkowników, z pominięciem grup, drukarek, usług i innych jednostek, które mogą się znajdować w domenie. W tym momencie należy wykonać co następuje (owszem, wartości dla filtra muszą być przekazane w formie tablicy – nawet jeżeli filtrujemy tylko jeden typ obiektu):

colAccounts.Filter = Array("user")

Następnie uruchamiamy pętlę For Each, aby przejść przez całą kolekcję. Wewnątrz tej pętli sprawdzamy każde indywidualne konto użytkownika, czy nie posiada ono właściwości FullName – Ken Meyer. Jeżeli tak jest, wywołujemy echo wartości właściwości Name i opuszczamy pętlę. Jeżeli konto nie posiada takiej właściwości, idziemy dalej po pętli i sprawdzamy następne konto. Robimy to z pomocą poniższego kodu:

If objUser.FullName = "Ken Myer" Then

    Wscript.Echo objUser.Name 

    Exit For

End If

Wprawdzie nie sprawia to tyle frajdy co wyszukiwanie za pomocą interfejsu ADO, ale nic więcej nie możemy zrobić. I to działa zarówno w przypadku domeny NT 4.0, jak i lokalnych użytkowników.

 Do początku strony Do początku strony

Centrum skryptów - Systemy operacyjne