Lekérdezés az Active Directoryból az Excelből

Gyakran a Windows rendszergazdának különféle feltöltéseket kell végrehajtania az Active Directory tartomány felhasználói adatai alapján. Képzelje el, hogy van egy fiókok listája (felhasználónevek samAccountName formátumban), és például információt kell szereznünk arról, hogy mely szervezetekben működnek ezek a felhasználók és a Canonical Name (CN). Korábban, hogy ilyen információt kapjak, egy kis szkriptet kellett írni a vbs-ben, amely sorrendben megismétli az összes rekordot az Excelben, és visszaadja a szükséges információkat az Active Directory-ból. Egy ilyen mechanizmus teljesen működőképes, de nem túl kényelmes, ezért úgy döntöttem, hogy a Visual Basic az alkalmazás nyelvéből adom ki az erejét, és végrehajtom Az Active Directory közvetlenül az Excelből lekérdezi (a makróból), mert egy ilyen technika elég univerzális lenne, és elvileg ezeket a forgatókönyveket tiszta lelkiismerettel továbbadhatjuk a kevésbé hozzáértő könyvelőknek és közgazdászoknak!

Készítettem egy új makrót egy Excel munkafüzetbe, és létrehoztam a GetADInfo nevû függvényt, amely a bevitelnél megkapja a keresett mezõ nevét (esetemben ez az Active Directory attribútumban tárolt felhasználónév - samAccountName), ennek a mezõnek a értéke (cellaérték) felhasználónévvel) és az AD artiboot neve, amelynek értékének a funkciónak vissza kell térnie.

Hogyan működik ez az egész? Példámban az A2 cella tartalmazza a domain felhasználó nevét, és azt szeretném, ha ez a felhasználó megtudja a társaságot, amelyben szerepel (AD „Company” mező), és a kanonikus nevét (AD „differentishedName” mező), ebben az esetben a cellák képleteit, ill. így néz ki:

B2. Cella (a szervezet neve):

= GetADInfo ("samAccountName"; A2; "Company")

C2 (CN) cella:

= GetADInfo ("samAccountName"; A2; "istinguishedName ")

Az AD lekérdezéséhez a VBA makró kódja a következő:

A GetADInfo funkció (ByVal SearchField, ByVal SearchString, ByVal ReturnField) 'Adja meg a domain nevet ("dc = domain, dc = local") Dim adoCommand, strDomain, objConnection strDomain = "dc = winitpro, dc = ru" Set objConnection = CreateObject (" ADODB.Connection ") objConnection.Open" Szolgáltató = ADsDSOObject; " 'Connecting Set adoCommand = CreateObject ("ADODB.Command") adoCommand.ActiveConnection = objConnection' Rekurzív keresés az AD-ben az adoCommand.CommandText = _ "domain gyökérrészétől kezdve (& (objectCategory =" & "User" & ")" & _ "(" & SearchField & "=" & SearchString & "));" & SearchField & "," & ReturnField & "; alfa" 'hozzon létre rekordkészletet. RecordSet Dim objRecordSet Set objRecordSet = adoCommand.Execute Ha objRecordSet.RecordCount = 0 Akkor GetADInfo = "nem található"' semmi sem található Egyéb GetADInfo = = ReturnField) 'visszatérési érték Vége Ha' Zárja be az objConnection.Close kapcsolatot A változók törlése Set objRecordSet = Semmi sem objCommand = Semmi sem objConnection = Nincs vége funkció

Ahhoz, hogy ez a funkció működjön, számos könyvtárat csatlakoztatnia kell a VBA-ban. A VBA szerkesztőben válassza az Eszközök-> Hivatkozások menüt, és a megjelenő ablakban jelölje meg a következő könyvtárakat:

  • Visual basic alkalmazáshoz
  • Microsoft Excel 14.0 objektumkönyvtár
  • OLE automatizálás
  • Microsoft Office 14.0 objektumkönyvtár
  • Microsoft ActiveX Data Objects 2.8 Library (vagy úgy)
  • Microsoft Scripting Runtime
  • Microsoft VBScript rendszeres kifejezések 5.5

A következő összetevők aktiválása után mentse el a VBA makrót és az Excel munkafüzetet, ennek eredményeként az Active Directory adatai megjelennek a megfelelő Excel mezőkben. A szkript szépsége az, hogy meglehetősen sokoldalú, és kis módosításokkal segít szinte bármilyen információ dinamikus lekérésében az Active Directory-ból közvetlenül a könyvben, közvetlenül az Excel munkafüzetben!