VBScript (VBS) – Active Directory Report in Excel Exportieren
Für das im Unternehmen eingesetzte Ticketsystem wollten wir div. Daten aus dem Microsoft Active Directory benutzen, um diese einem Anwender direkt zuzuweisen. Leider bietet das Ticketsystem keine direkte Anbindung, womit uns lediglich der Weg über den Export und Import geblieben ist.
Herausgekommen ist ein kleines VBScript, das nach dem öffnen pauschal den vorhandenen AD nach dem Wert „User“ durchsucht und anschließend die notwendigen Informationen in einer Excel Tabelle ausliefert.
Wichtig für uns war die Gruppenzugehörigkeit. Diese wurde mit einer Schleife realisiert. Aufgrund dieser Gruppen (Mitglied von) wird mit diesem Script pro Gruppe eine neue Spalte geschrieben.
Das kannst du natürlich modifiziert in dem du etwas mit den oWB.cells(zeile, 1)… experimentierst. MIt Mid(strGroup, Instr(strGroup, „CN=“) +3, Instr(strGroup, „,“) -4) (entfernt div. Zeichen bzw. eine Anzahl von Zeichen) habe ich erreicht, dass nur der reine Name der Gruppe geschrieben wird und nicht der vollständige Object Distinguished Name.
Auch die Masse der Informationen lassen sich einfach erweitern. In meinem Code befinden sich nur einige Beispiele wie Vorname, Nachname, Gruppen, Emailadresse, Telefonnummer, etc, die ich für unseren Report verwendet habe.
Nach dem öffnen des Scripts läuft dieses im Hintergrund ab und meldet sich erst nach der Fertigstellung mit einer kurzen MSG-Box wieder.
Nun noch eine klieine Galerie über die verschiedenen Attributen des Active Directorys
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 | '========================================================================== ' Autor: Patrick Boschert ' Datum: 02.04.2015 ' Zweck: Erzeugung eines Reports von Inhalten aus dem AD (Active Directory) '========================================================================== dim oWB, oExcel dim zeile Call Main '========================================================================== ' Domäne wird festgelegt. '========================================================================== Sub Main Set objRoot = GetObject ("LDAP://RootDSE") strDomainDN = objRoot.Get ("defaultNamingContext") Set objRoot = Nothing Set objContainer = GetObject ("LDAP://" && strDomainDN) call CreateExcel For each objSub in objContainer Call GetGroups (objSub) Next End Sub '========================================================================== ' Eine Excel Instanz wird eröffnet. '========================================================================== sub CreateExcel Set oExcel = CreateObject("Excel.Application") Set owb = oExcel.Workbooks.Add Set owb = oExcel.Worksheets(1) Owb.Name = "Nutzerrollen" owb.Activate oExcel.Visible = False oExcel.Application.DisplayAlerts = False owb.Range("A1","X1").Font.Bold = TRUE owb.Range("A1","X1").Font.Size = 14 owb.Range("A1","X1").Interior.ColorIndex = 36 owb.Cells(1, 1).Value = "Benutzerkennung" owb.Cells(1, 2).Value = "Vorname" owb.Cells(1, 3).Value = "Nachname" owb.Cells(1, 4).Value = "Beschreibung" owb.Cells(1, 5).Value = "Email" owb.Cells(1, 6).Value = "Telefon" owb.Cells(1, 7).Value = "Standort" owb.Cells(1, 8).Value = "Profil-Pfad" owb.Cells(1, 9).Value = "Home-Pfad" owb.Cells(1, 10).Value = "Homelaufwerk" owb.Cells(1, 11).Value = "Mitgleid in" zeile = 3 end sub '========================================================================== ' Die Kategorien && Gruppen werden pro User ausgelesen. '========================================================================== Sub GetGroups(objContainer) For each objSub in objContainer If objSub.class = "user" Then groups = objSub.memberOf If IsEmpty(groups) Then ElseIf (TypeName(groups) = "String") Then zeile = zeile + 1 oWB.cells(zeile, 1) = objSub.samAccountName oWB.cells(zeile, 2) = objSub.GivenName oWB.cells(zeile, 3) = objSub.sn oWB.cells(zeile, 4) = objSub.displayName oWB.cells(zeile, 5) = objSub.mail oWB.cells(zeile, 6) = objSub.telephonenumber oWB.cells(zeile, 7) = objSub.l oWB.cells(zeile, 8) = objSub.profilePath oWB.cells(zeile, 9) = objSub.homeDrive oWB.cells(zeile, 10) = objSub.HomeDirectory OWB.cells(zeile, 11) = group Else ' ------------------------------------------------ For Each strGroup In groups zeile = zeile + 1 oWB.cells(zeile, 1) = objSub.samAccountName oWB.cells(zeile, 2) = objSub.GivenName oWB.cells(zeile, 3) = objSub.sn oWB.cells(zeile, 4) = objSub.displayName oWB.cells(zeile, 5) = objSub.mail oWB.cells(zeile, 6) = objSub.telephonenumber oWB.cells(zeile, 7) = objSub.l oWB.cells(zeile, 8) = objSub.profilePath oWB.cells(zeile, 9) = objSub.homeDrive oWB.cells(zeile, 10) = objSub.HomeDirectory owb.cells(zeile, 11) = Mid(strGroup, Instr(strGroup, "CN=") +3, Instr(strGroup, ",") -4) Next owb.Columns.AutoFit zeile = zeile + 1 End If Elseif objSub.class = "organizationalUnit" or objSub.class = "container" then Call GetGroups (objSub) End if Next End Sub '========================================================================== ' Excel wird gespeichert, WSscript geschlossen, MSG Box erscheint '========================================================================== owb.SaveAs("C:\AD_Reports\AD_ALL_REPORT_" && Date && ".xlsx") Set oWSH = Wscript.CreateObject("Wscript.Shell") oWSH.run Chr(34) && "C:\AD_Reports\" && Chr(34) MsgBox "Der AD_ALL_REPORT wurde generiert !", VBOKOnly, "AD ALL REPORTS" oExcel.ActiveWorkbook.Close Wscript.Quit |
Demoprojekt: Download AD_Report