Centrum Skryptów - Active Directory

W jaki sposób znaleźć i przenieść konto Active Directory? 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 znaleźć i przenieść konto Active Directory?

Cześć Skrypciarze! Muszę przenieść konto z jednej OU (Organizational Unit - jednostka organizacyjna) do innej, niestety nie wiem, w której OU konto aktualnie się znajduje. Jakiś pomysł?

-- AA

Cześć AA. Wielkie rubryki porad - na przykład Zbigniew Lew-Starowicz odpowiada, Przyjaciółka - Między nami, Cześć Skrypciarzu! - wyróżnia to, że zawsze odpowiadają tak samo. Nieważne, jak często ludzie skarżą się w Między nami na wrednego sąsiada – w odpowiedzi nigdy nie pojawi się rada, żeby spalić mu dom. Tak samo jest ze Zbigniewem Lwem-Starowiczem i z Cześć Skrypciarze!.

No dobra, to ze Zbigniewem jest tak samo.

Chodzi o to, że często na pytania czytelników dajemy tę samą odpowiedź. Także tym razem. A zatem: ten problem tak naprawdę składa się z dwóch części. Zajmiemy się nimi osobno. Aha, jeszcze jedno: jedna z części dotyczy wyszukiwania Active Directory. Tak, wiemy: słyszeliście to już setki razy. Ale jak widać ta metoda działa.

Jak już się zapewne domyśliliście, jeśli jedna część dotyczy wyszukiwania Active Directory, to druga musi dotyczyć przenoszenia konta z jednej OU do innej. Jest to bardzo proste, więc pójdzie na pierwszy ogień. Oto przykładowy skrypt, który przenosi konto komputera atl-ws-01 z OU Finance do OU Research:

Set objOU = GetObject("LDAP://OU=Research,DC=fabrikam,DC=com")

intReturn = objOU.MoveHere _

    ("LDAP://CN=atl-ws-01,OU=Finance,DC=fabrikam,DC=com", vbNullString)

Zgadza się: tylko dwie linie kodu. Najpierw łączymy się z nową OU (tą, do której chcemy przenieść konto komputera). Następnie wywołujemy metodę MoveHere (przenieś tutaj) i przekazujemy jej dwa parametry: ADsPath komputera, który chcemy przenieść, oraz vbNullString – stałą VBScript równą Null, czyli zero. Przekazując Null jako drugiego parametru informujemy metodę MoveHere, że chcemy, żeby obiekt zachował bieżącą CN (Common Name – nazwa pospolita), czyli atl-ws-01. Gdybyśmy przekazali inną CN, to komputer nie tylko zostałby przeniesiony, ale zmieniona zostałaby też jego nazwa.

Przy okazji, tak naprawdę parametr Null nie jest absolutnie konieczny; jeśli w skrypcie nie określicie innego parametru, MoveHere uzna, że drugim parametrem jest Null. Opisaliśmy go tu tylko po to, żebyście wiedzieli, że MoveHere akceptuje dwa parametry.

Specjalny skrypt bonusowy: załóżmy, że jednak chcielibyście zmienić nazwę konta Active Directory. Cóż, w takim razie łączymy się z OU, w której aktualnie znajduje się konto, wywołujemy metodę MoveHere i nadajemy nową CN. Ten skrypt zmienia nazwę komputera z atl-ws-01 na finance-ws-01:

Set objOU = GetObject("LDAP://OU=Finance,DC=fabrikam,DC=com")

intReturn = objOU.MoveHere _

    ("LDAP://CN=atl-ws-01,OU=Finance,DC=fabrikam,DC=com", "cn=finance-ws-01")

Powinniśmy chyba pobierać opłaty za te bonusowe skrypty, nie uważacie?

Teraz kiedy już wiemy, jak przenieść konto, pozostaje nam tylko kwestia jak znaleźć to konto. W tym właśnie miejscu użyjemy skryptu wyszukiwania Active Directory. Ten przykładowy skrypt sprawdza, czy w Active Directory znajduje się konto komputera o nazwie atl-ws-01:

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 FROM 'LDAP://dc=fabrikam,dc=com' WHERE objectCategory='computer' " & _

        "AND name='atl-ws-01'"

Set objRecordSet = objCommand.Execute



objRecordSet.MoveFirst

Do Until objRecordSet.EOF

    Wscript.Echo objRecordSet.Fields("ADsPath").Value

    objRecordSet.MoveNext

Loop

Ten skrypt po prostu wywołuje echo ADsPath komputera. A skoro mamy już ADsPath, możemy zrobić następny krok i przenieść konto komputera do innej OU. (Pamiętajcie, że jeżeli nie zmieniamy nazwy komputera, ADsPath jest jedynym parametrem, który musimy przekazać do MoveHere). Poniżej macie ostateczny skrypt, który wyszukuje komputer atl-ws-01 i przenosi go z OU Research do OU Finance:

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 FROM 'LDAP://dc=fabrikam,dc=com' WHERE objectCategory='computer' " & _

        "AND name='atl-ws-01'"

Set objRecordSet = objCommand.Execute



objRecordSet.MoveFirst

Do Until objRecordSet.EOF

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

    Set objOU = GetObject("LDAP://OU=Research,DC=fabrikam,DC=com")

    intReturn = objOU.MoveHere(strADsPath, vbNullString)

    objRecordSet.MoveNext

Loop

Lekkie, łatwe i przyjemne.

Nie wyjaśniliśmy tu, jak działa wyszukiwanie Active Directory - zainteresowanych użyciem skryptów do wyszukiwania Active Directory odsyłamy do tego webcastu Skrypciarzy.

W następnym odcinku: spalcie dom sąsiada.

Nie, moment, nie róbcie tego! Żartowaliśmy! Hm, może jednak lepiej będzie, jak będziemy się trzymali tylko skryptów...

 Do początku strony Do początku strony


Centrum Skryptów - Active Directory