Cukup sering, administrator sistem Windows harus melakukan berbagai unggahan berdasarkan informasi tentang pengguna dalam domain Direktori Aktif. Bayangkan kita memiliki daftar akun (nama pengguna dalam format samAccountName), dan misalnya, kita perlu mendapatkan informasi tentang organisasi tempat pengguna ini bekerja dan Nama Canonical (CN) mereka. Sebelumnya, untuk mendapatkan informasi ini, saya harus menulis skrip kecil dalam vbs, yang berurutan mengulangi semua catatan di Excel dan mengembalikan kembali informasi yang diperlukan dari Active Directory. Mekanisme seperti itu berfungsi penuh, tetapi tidak terlalu nyaman, jadi saya memutuskan untuk menggunakan kekuatan Visual Basic dari bahasa Aplikasi dan mengeksekusi Permintaan Direktori Aktif langsung dari Excel (dari makro), karena teknik seperti itu akan sangat universal dan, pada prinsipnya, semua skrip ini dapat ditransfer dengan hati nurani yang jelas kepada akuntan dan ekonom yang kurang paham!
Saya membuat makro baru di buku kerja Excel, dan membuat fungsi yang disebut GetADInfo, yang, pada input, mendapatkan nama bidang yang dicari (dalam kasus saya, ini adalah nama pengguna yang disimpan dalam atribut Active Directory - samAccountName), nilai bidang ini (nilai sel) dengan nama pengguna) dan nama artiboot AD yang nilainya kembali berfungsi.
Bagaimana cara kerjanya? Dalam contoh saya, sel A2 berisi nama pengguna domain, dan saya ingin agar pengguna ini mengetahui perusahaan tempat ia terdaftar (bidang AD "Perusahaan") dan nama kanoniknya (bidang AD "dibedakan Nama"), dalam hal ini rumus untuk sel, masing-masing akan terlihat seperti ini:
Sel B2 (nama organisasi):
= GetADInfo ("samAccountName"; A2; "Company")
Sel C2 (CN):
= GetADInfo ("samAccountName"; A2; "dibedakanName")
Kode makro VBA untuk mengambil data dari AD adalah sebagai berikut:
Fungsi GetADInfo (ByVal SearchField, ByVal SearchString, ByVal ReturnField) 'Tentukan nama domain ("dc = domain, dc = lokal") Dim adoCommand, strDomain, objConnection strDomain = "dc = winitpro, dc = ru" Set objConnection = CreateObject (" ADODB.Connection ") objConnection.Open" Provider = ADsDSOObject; " 'Menghubungkan Set adoCommand = CreateObject ("ADODB.Command") adoCommand.ActiveConnection = objConnection' Pencarian rekursif dalam AD mulai dari root domain adoCommand.CommandText = _ "; (& (objectCategory =" & "Pengguna" & ")" & & _ "(" & SearchField & "=" & SearchString & "));" & SearchField & "," & ReturnField & "; subtree" 'buat kumpulan rekaman RecordSet Dim objRecordSet Set objRecordSet = adoCommand.Execute Jika objRecordSet.RecordCount = 0 Maka GetADInfo = "tidak ditemukan"' tidak ditemukan "'Tidak ditemukan" ReturnField) 'mengembalikan nilai End If' Tutup koneksi objConnection.Close 'Hapus variabel Set objRecordSet = Tidak Ada Set objCommand = Tidak Ada Set objConnection = Tidak Ada Fungsi Akhir
Agar fungsi ini berfungsi, Anda perlu menghubungkan sejumlah perpustakaan di VBA. Di editor VBA, pilih menu Tools-> Referensi dan di jendela yang muncul, tandai perpustakaan berikut:
- Visual basic untuk aplikasi
- Perpustakaan Objek Microsoft Excel 14.0
- Otomasi OLE
- Perpustakaan objek Microsoft Office 14.0
- Perpustakaan Microsoft ActiveX Data Objects 2.8 (atau lebih)
- Microsoft Scripting Runtime
- Ekspresi Reguler Microsoft VBScript 5.5
Setelah Anda mengaktifkan komponen-komponen berikut, simpan VBA makro dan buku kerja Excel, dan sebagai hasilnya, informasi dari Active Directory muncul di bidang Excel yang sesuai. Keindahan skrip ini adalah ia sangat fleksibel dan dengan sedikit modifikasi akan membantu untuk mengambil hampir semua informasi secara dinamis dari Active Directory tepat di workbook tepat di workbook Excel!