VBScript (VBS) – Active Directory Report in Excel Exportieren

 in Entwicklung, Microsoft Windows



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