Dość często administrator systemu Windows musi wykonywać różne operacje przesyłania na podstawie informacji o użytkownikach w domenie Active Directory. Wyobraź sobie, że mamy listę kont (nazwy użytkowników w formacie samAccountName) i na przykład potrzebujemy informacji o organizacji, w której ci użytkownicy pracują, i ich kanonicznej nazwie (CN). Wcześniej, aby uzyskać takie informacje, musiałem napisać mały skrypt w vbs, który kolejno iteruje wszystkie rekordy w Excelu i zwraca wymagane informacje z Active Directory. Taki mechanizm jest w pełni funkcjonalny, ale niezbyt wygodny, więc postanowiłem wykorzystać moc Visual Basic z języka aplikacji i wykonać Zapytania Active Directory bezpośrednio z Excela (z makra), ponieważ taka technika byłaby dość uniwersalna i w zasadzie wszystkie te skrypty mogą być przekazywane z czystym sumieniem mniej doświadczonym księgowym i ekonomistom!
Utworzyłem nowe makro w skoroszycie programu Excel i utworzyłem funkcję o nazwie GetADInfo, która na wejściu pobiera nazwę wyszukiwanego pola (w moim przypadku jest to nazwa użytkownika zapisana w atrybucie Active Directory - samAccountName), wartość tego pola (wartość komórki z nazwą użytkownika) i nazwą narzędzia artiboot AD, którego wartość powinna zwrócić funkcja.
Jak to wszystko działa? W moim przykładzie komórka A2 zawiera nazwę użytkownika domeny i chcę, aby ten użytkownik znalazł firmę, w której jest wymieniony (pole AD „Firma”) i jego kanoniczną nazwę (pole AD „nazwa wyróżniająca”), w tym przypadku odpowiednio formuły dla komórek będzie wyglądać następująco:
Komórka B2 (nazwa organizacji):
= GetADInfo („samAccountName”; A2; „Firma”)
Komórka C2 (CN):
= GetADInfo („samAccountName”; A2; „nazwa wyróżniająca”)
Kod makra VBA do pobierania danych z AD wygląda następująco:
Funkcja GetADInfo (ByVal SearchField, ByVal SearchString, ByVal ReturnField) 'Podaj nazwę domeny („dc = domena, dc = lokalny”) Dim adoCommand, strDomain, objConnection strDomain = "dc = winitpro, dc = ru" Ustaw objConnection = CreateObject (" ADODB.Connection ”) objConnection.Open„ Provider = ADsDSOObject; ” „Łączenie Ustaw adoCommand = CreateObject („ ADODB.Command ”) adoCommand.ActiveConnection = objConnection” Wyszukiwanie rekurencyjne w AD od katalogu głównego domeny adoCommand.CommandText = _ ”; (& (objectCategory =„ & „User” & ”)” & _ "(" & SearchField & "=" & SearchString & "));" & SearchField & "," & ReturnField & "; poddrzewo" 'utwórz zestaw rekordów RecordSet Dim objRecordSet Set objRecordSet = adoCommand.Execute Jeśli objRecordSet.RecordCount = 0 Następnie GetADInfo = "nie znaleziono"' nic nie znaleziono Else GetADInfo = objRecordS ReturnField) ”wartość zwracana End If 'Zamknij połączenie objConnection.Close' Wyczyść zmienne Ustaw objRecordSet = Nic Ustaw objCommand = Nic Ustaw objConnection = Nic Funkcja końcowa
Aby ta funkcja działała, musisz podłączyć kilka bibliotek w VBA. W edytorze VBA wybierz menu Narzędzia-> Referencje iw oknie, które się pojawi, zaznacz następujące biblioteki:
- Visual Basic do aplikacji
- Biblioteka obiektów Microsoft Excel 14.0
- Automatyzacja OLE
- Biblioteka obiektów Microsoft Office 14.0
- Biblioteka Microsoft ActiveX Data Objects 2.8 (lub tak)
- Środowisko wykonawcze skryptów Microsoft
- Wyrażenia regularne Microsoft VBScript 5.5
Po aktywacji następujących składników zapisz makro VBA i skoroszyt programu Excel, w wyniku czego informacje z usługi Active Directory pojawią się w odpowiednich polach programu Excel. Zaletą tego skryptu jest to, że jest dość wszechstronny, a przy niewielkich modyfikacjach pomoże dynamicznie wyszukiwać prawie wszystkie informacje z usługi Active Directory bezpośrednio w książce w skoroszycie programu Excel!