Centrum skryptów - Active Directory

W jaki sposób przypisać wszystkim moim użytkownikom nową nazwę UPN? 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 przypisać wszystkim moim użytkownikom nową nazwę UPN?

Cześć Skrypciarzu! W jaki sposób przypisać wszystkim moim użytkownikom nową nazwę UPN?

-- CH

Cześć CH! UPN (User Principal Name – główna nazwa użytkownika) jest alternatywnym sposobem logowania się do domeny. Z reguły logowanie się do domeny odbywa się poprzez naciśnięcie kombinacji klawiszy Ctrl-Alt-Delete, wpisanie nazwy użytkownika, nazwy domeny, hasła i wciśnięcie ENTER. Używając UPN, nie trzeba wpisywać oddzielnie nazw użytkownika i domeny. Zamiast tego wpisujesz nazwę użytkownika taką jak poniżej:

kenmyer@fabrikam.com

Nie będziemy się zagłębiać w szczegóły dotyczące UPN. Powiemy tylko, że, między innymi, pozwala na zalogowanie do komputera, nawet jeśli nazwa Twojej domeny nie pojawi się jako opcja do wybrania na liście Zaloguj się do.

Jak zatem zmienić UPN wszystkich użytkowników w domenie? Cóż, to proces dwuetapowy: po pierwsze, musisz zdobyć listę wszystkich użytkowników w domenie, a następnie zmienić UPN każdego z nich. Zacznijmy od etapu pierwszego.

Najlepszym sposobem na zdobycie listy użytkowników jest wyszukiwanie Active Directory. Szczegóły wyszukiwania Active Directory już kiedyś omawialiśmy, więc teraz podamy Ci tylko przykładowy skrypt; po więcej informacji o wyszukiwaniu Active Directory odsyłamy do Webcastu Skrypciarzy. A poniżej masz skrypt, który zwraca ADsPath dla każdego użytkownika w domenie fabrikam.com:

kenmyer@fabrikam.com

ADsPath podaje ścieżkę do konta użytkownika w Active Directory; na przykład ścieżka dla użytkownika Ken Myer będzie wyglądała tak:

objUser.userPrincipalName = New UPN we’re assigning the user

objUser.SetInfo

ADsPath jest nam potrzebne do połączenia się z kontem każdego użytkownika, aby zmienić UPN dla tego konta; ADsPath kieruje nas bezpośrednio do konta i – jak zobaczymy – pozwala na połączenie się z kontem przy pomocy pojedynczej linii kodu, bez potrzeby manipulowania ciągiem.

Co się dzieje, kiedy połączymy się z kontem użytkownika? W tym momencie musimy zrobić dwie rzeczy: przypisać użytkownikowi nowy UPN, a następnie wywołać metodę SetInfo, która wpisuje nowy UPN do konta Active Directory użytkownika. W pseudokodzie proces ten wygląda tak:

objUser.userPrincipalName = Nowa nazwa UPN nadawana użytkownikowi

objUser.SetInfo

W prawdziwym kodzie proces uzyskiwania wszystkich kont Active Directory użytkowników, łączenia się z każdym z nich indywidualnie, a następnie przypisywania każdemu nowego UPN, wygląda tak:

On Error Resume Next



Const ADS_SCOPE_SUBTREE = 2



Set objConnection = CreateObject("ADODB.Connection")

Set objCommand =   CreateObject("ADODB.Command")

objConnection.Provider = "ADsDSOObject"

objConnection.Open "Active Directory Provider"

Set objCommand.ActiveConnection = objConnection



objCommand.Properties("Page Size") = 1000

objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE 



objCommand.CommandText = _

    "SELECT AdsPath,samAccountName,userPrincipalName FROM " & _

        "'LDAP://dc=fabrikam,dc=com' WHERE objectCategory='user'"  

Set objRecordSet = objCommand.Execute



objRecordSet.MoveFirst

Do Until objRecordSet.EOF

    strUser = objRecordSet.Fields("ADsPath").Value

    strNewUPN = objRecordSet.Fields("samAccountName").Value & "@" & "contoso.com"

    Set objUser =  GetObject(strUser)

    objUser.userPrincipalName = strNewUPN

    objUser.SetInfo

    objRecordSet.MoveNext

Loop

Po uzyskaniu kolekcji kont użytkowników, wszystko rozgrywa się w pętli Do Until (wykonuj dopóki). Wewnątrz pętli, zaczynamy od przypisania ADsPath dla użytkownika 1 do zmiennej strUser. Następnie konstruujemy nowy UPN dla użytkownika. Zazwyczaj UPN składa się z nazwy używanej przez użytkownika do logowania (samAccountName) oraz z nazwy domeny. Ponieważ Twoje pytanie dotyczyło zmieniania istniejących UPN, zrobimy coś innego. Udamy, że Twoja firma połączyła się z inną, a Ty chcesz, żeby użytkownicy używali nowej nazwy (contoso.com) w swoich UPN. Na przykład:

kenmyer@contoso.com

Stworzymy zatem UPN, który będzie się składał z samAccountName, znaku @ i contoso.com, a następnie przechowamy go w zmiennej strNewUPN. To właśnie robi linia kodu poniżej:

strNewUPN = objRecordSet.Fields("samAccountName").Value & "@" & "contoso.com"

Jak dotąd wszystko gra. Następnie łączymy się z kontem danego użytkownika i przypisujemy mu nowy UPN. Wszystko to wymaga zaledwie dwóch linii kodu:

Set objUser =  GetObject(strUser)do 

objUser.userPrincipalName = strNewUPN

Wywołujemy SetInfo i nasz użytkownik ma już nowy UPN. Następnie zapętlamy i przypisujemy nowy UPN następnemu użytkownikowi w kolekcji. Proces ten działa automatycznie, dopóki każdy z użytkowników nie będzie miał nowego UPN.

Nie wiemy, jak często będziesz musiał zmieniać UPN wszystkich użytkowników w domenie, ale główna idea tego skryptu polega na tym, że można go użyć również do wielu innych celów. Na przykład, możesz zmienić nazwę firmy, lub zażądać od wszystkich użytkowników zmiany hasła przy następnym logowaniu. Skrypt, który dzisiaj zaprezentowaliśmy, można łatwo zmodyfikować, aby wykonywał wszelkie zadania związane ze zmianami w kontach użytkowników w domenie.

 Do początku strony Do początku strony


Centrum skryptów - Active Directory