Zapytanie Active Directory z Excela

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!