VB Script anpassen - AD Adressbearbeitung

  • VBScript

    VB Script anpassen - AD Adressbearbeitung

    Guten Tag zusammen,

    ich habe an diesen Post einmal das Script angehangen um welches es geht.

    Ich wollte gerne das die Zeile Position eine Mehrspaltige Zeile ist. Die Zeile wird sich auf das AD-Feld Beschreibung beziehen.

    Habt ihr vllt eine Idee wie man das umsetzen kann?

    Vielen Dank im voraus.

    Marco Werkmeister

    Quellcode

    1. <HTML>
    2. <HEAD>
    3. <LINK REL="stylesheet" type="text/css" href="styles.css">
    4. <TITLE></TITLE>
    5. <META NAME="author" CONTENT="Marco Werkmeister">
    6. <META HTTP-EQUIV="MSThemeCompatible" CONTENT="Yes">
    7. <HTA:APPLICATION ID="oHTA"
    8. APPLICATIONNAME="Adressbearbeitung"
    9. CAPTION="yes"
    10. ICON="rgb.jpg"
    11. >
    12. </HEAD>
    13. <BODY onload="beschriften();" application="yes">
    14. <img src="rgb.jpg">
    15. <H2 id="head"></H2>
    16. <FORM name = "SearchForm" onsubmit="suche();">
    17. <table>
    18. <TR>
    19. <TD width="150px" id="lQuelle">[B]enutzer:</TD>
    20. <TD id="lUser"><INPUT type="text" name="fuser" size="70" accesskey="b">
    21. <BUTTON onclick="suche()" accesskey="f"><SPAN class="symb">$</SPAN> Benutzer [f]inden</BUTTON>
    22. </TD>
    23. </TR>
    24. <tr>
    25. <td colspan="2"><P id="ergebnis"></P>
    26. <hr />
    27. </td>
    28. </tr>
    29. </TABLE>
    30. </FORM>
    31. <form name="AddressForm">
    32. <div id="formUserData">
    33. </div>
    34. <div id="saveButton"></div>
    35. <button onclick="location.reload();"><SPAN class="symb">û</SPAN> Abbrechen</button>
    36. </form>
    37. <BR clear="all">
    38. <HR>
    39. <SCRIPT language="VBScript">
    40. '''''''''''''''''''''''''''''''''''''''''''''
    41. ' KUKA-Adressbearbeitung: Applikation zum Bearbeiten von Adressdaten in AD
    42. ' Version 1.0 vom 04.03.2015
    43. ' Änderung:
    44. '
    45. ' Von Marco Werkmeister
    46. '
    47. ' Keine Gewähr! Nutzung auf eigene Gefahr!
    48. '
    49. '''''''''''''''''''''''''''''''''''''''''''''
    50. titel = "Adressbearbeitung 1.0"
    51. ' ***** Feldnamen für die Oberfläche
    52. ' Anzahl der Felder (minus 1) in der ersten Dimension angeben
    53. Dim arrFeld(6,1)
    54. ' Feldnamen definieren
    55. ' Format:
    56. ' x, 0: LDAP-Feldname in AD
    57. ' x, 1: Anzeigename für den Benutzer
    58. arrFeld(0, 0) = "initials"
    59. arrFeld(0, 1) = "Vollmachtszusatz"
    60. arrFeld(1, 0) = "description"
    61. arrFeld(1, 1) = "Position"
    62. arrFeld(2, 0) = "physicalDeliveryOfficeName"
    63. arrFeld(2, 1) = "Gebäude/Stockwerk"
    64. arrFeld(3, 0) = "department"
    65. arrFeld(3, 1) = "Abteilung"
    66. arrFeld(4, 0) = "telephoneNumber"
    67. arrFeld(4, 1) = "Rufnummer"
    68. arrFeld(5, 0) = "facsimileTelephoneNumber"
    69. arrFeld(5, 1) = "Fax"
    70. arrFeld(6, 0) = "mobile"
    71. arrFeld(6, 1) = "Mobilnummer"
    72. ' **** Ende Feldnamen
    73. Const ADS_PROPERTY_CLEAR = 1
    74. Const ADS_PROPERTY_APPEND = 3
    75. ' Globale Variablen und Objekte
    76. Dim objRS
    77. Dim objConn
    78. Dim dictChanges
    79. ' Dictionary-Objekt, das die geänderten Daten hält
    80. Set dictChanges = CreateObject("Scripting.Dictionary")
    81. Sub suche()
    82. strANRString = document.SearchForm.fuser.value
    83. document.all.ergebnis.innerHTML = ""
    84. If strANRString = "" Then
    85. showItems "Kein Suchtext angegeben!"
    86. Exit Sub
    87. End If
    88. ' Domäne ansprechen
    89. On Error Resume Next
    90. Set objRoot = GetObject("LDAP://rootDSE")
    91. strDomainName = objRoot.Get("DefaultNamingContext")
    92. ' Set objDomain = GetObject("LDAP://" & strDomainName)
    93. If checkit("Keine Domäne ansprechbar!") Then
    94. Exit Sub
    95. End If
    96. On Error Goto 0
    97. strSQL = "SELECT AdsPath, displayName, sAMAccountName, mail FROM 'LDAP://" _
    98. & strDomainName & "' WHERE anr='" _
    99. & strANRString & "' AND objectClass='user' AND objectCategory='person'"
    100. 'Create ADO connection object for Active Directory
    101. Set Con = CreateObject("ADODB.Connection")
    102. Con.Provider = "ADsDSOObject"
    103. Con.Open "Active Directory Provider"
    104. If checkit("Fehler bei ADO-Connection!") Then
    105. Exit Sub
    106. End If
    107. 'Create ADO command object for the connection.
    108. Set ocommand = CreateObject("ADODB.Command")
    109. ocommand.ActiveConnection = Con
    110. If checkit("Fehler bei ADO-Command!") Then
    111. Exit Sub
    112. End If
    113. 'Assemble the commandtext.
    114. ocommand.CommandText = strSQL
    115. 'Execute the query.
    116. Set objRS = ocommand.Execute
    117. If checkit("Fehler bei SQL-Kommando!") Then
    118. Exit Sub
    119. End If
    120. On Error Goto 0
    121. intNumDisplay = 0
    122. intCount = 0
    123. displayResult objRS, 100, 100
    124. End Sub
    125. Sub displayResult(rs, intMaxLines, intMaxChars)
    126. ' Funktion:
    127. ' Eingabeparameter:
    128. ' Kommentar:
    129. document.all.ergebnis.innerHTML = ""
    130. intCount = rs.RecordCount
    131. Select Case intCount
    132. Case 0 showItems "Kein Eintrag entspricht dem Suchbegriff."
    133. Case 1 showItems "1 Eintrag entspricht dem Suchbegriff."
    134. Case Else showItems intCount & " Einträge entsprechen dem Suchbegriff."
    135. End Select
    136. On Error Resume Next
    137. intCount = 0
    138. ' Navigate the record set
    139. strText = strText & "<TABLE border=""0""><TR>"
    140. For Each feld In rs.fields
    141. If feld.Name <> "AdsPath" Then
    142. strText = strText & "<TD valign=""top""><B>" & feld.name & "</B></TD>"
    143. End If
    144. Next
    145. strText = strText & "<TD>&nbsp;</TD>"
    146. If rs.EOF Then
    147. strText = strText & "</TR><TR><TD colspan=""" & rs.fields.count+1 & """><I>Keine Benutzer gefunden.</I>"
    148. End If
    149. While (Not rs.EOF) And (intCount < intMaxLines)
    150. intCount = intCount + 1
    151. strText = strText & "</TR><TR class=""row" & intCount Mod 2 & """>"
    152. For i = 0 To rs.Fields.Count - 1
    153. If rs.Fields(i).Name <> "AdsPath" Then
    154. strText = strText & "<TD valign=""top"">"
    155. If (IsNull(rs.Fields(i).Value)) Then
    156. strValue = "<I>(leer)</I>"
    157. ElseIf rs.Fields(i).type = 128 Or rs.Fields(i).type = 204 Or rs.Fields(i).type = 205 Then
    158. strValue = "<I>binär</I>"
    159. Else
    160. wert = rs.Fields(i).Value
    161. strValue = CStr(wert)
    162. if len(strValue) > intMaxChars then strValue = Left(strValue, intMaxChars) & "<I>(...)</I>"
    163. End If
    164. strText = strText & Trim(strValue)
    165. strText = strText & "</TD>"
    166. End If
    167. Next
    168. ' adsPath maskieren, um JavaScript-Übergabe zu ermöglichen
    169. strAdsPath = Replace(objRS.Fields("AdsPath").Value, "\", "\\")
    170. strText = strText & "<TD><BUTTON onclick=""selectUser('" & strAdsPath _
    171. & "');"">Benutzer auswählen</BUTTON></TD>"
    172. rs.MoveNext
    173. If checkit("Fehler bei Verarbeitung des Recordsets, Zeile: " & intCount) Then
    174. Exit Sub
    175. End If
    176. Wend
    177. strText = strText & "</TR></TABLE>"
    178. showItems strText
    179. if not(intCount < intMaxLines) then showItems "<I>Ausgabe bei " & intMaxLines & " Zeilen abgebrochen.</I><BR>"
    180. On Error Goto 0
    181. End Sub
    182. Sub showItems(strText)
    183. ' Funktion: Ausgabe der Ergebnisse
    184. ' Eingabeparameter:
    185. ' Kommentar:
    186. document.all.ergebnis.innerHTML = document.all.ergebnis.innerHTML & strText
    187. End Sub
    188. Sub selectUser(strUserDN)
    189. Set objUser = GetObject(strUserDN)
    190. objUser.GetInfo
    191. strDisplayname = objUser.displayName
    192. strgivenName = objUser.givenName
    193. strsn = objUser.sn
    194. strmail = objUser.mail
    195. strcompany = objUser.company
    196. strstreetAddress = objUser.streetAddress
    197. strpostalCode = objUser.postalCode
    198. strl = objUser.l
    199. strwwwHomePage = objUser.wwwHomePage
    200. document.all.ergebnis.innerHTML = ""
    201. document.SearchForm.fuser.value = ""
    202. showItems "<br>"
    203. showItems "<B>Gewählter Benutzer: </B><br>"
    204. showItems "" & strsn & "<br>"
    205. showItems "" & strgivenName & "<br>"
    206. showItems "" & strmail & "<br>"
    207. showItems "" & strcompany & "<br>"
    208. showItems "" & strstreetAddress & "<br>"
    209. showItems "" & strpostalCode & "<br>"
    210. showItems "" & strl & "<br>"
    211. showItems "" & strwwwHomePage & "<br>"
    212. ErzeugeFelder(objUser)
    213. End Sub
    214. Sub ErzeugeFelder(objUser)
    215. strFelderCode = "<TABLE>"
    216. For i = 0 To UBound(arrFeld)
    217. ' Felder können leer sein, daher Fehler abfangen
    218. On Error Resume Next
    219. strData = ""
    220. strData = objUser.get(arrFeld(i, 0))
    221. strAdsPath = Replace(objUser.AdsPath, "\", "\\")
    222. On Error Goto 0
    223. strFelderCode = strFelderCode & "<TR><TD width=""150px"">" _
    224. & arrFeld(i, 1) & ":</TD><TD>"
    225. strFelderCode = strFelderCode & "<INPUT type=""text"" id=""f" _
    226. & arrFeld(i, 0) & """ size=""70"" value=""" & strData _
    227. & """ onchange=""changeValue('f" &arrFeld(i, 0) & "');"">"
    228. strFelderCode = strFelderCode & "</TD></TR>"
    229. Next
    230. strFelderCode = strFelderCode & "</TABLE>"
    231. document.all.formUserData.innerHTML = strFelderCode
    232. document.all.saveButton.innerHTML = "<button onclick=""speichereDaten('" _
    233. & strAdsPath & "');"" accesskey=""s""><SPAN class=""symb"">ü</SPAN> Änderungen [s]peichern!</button>"
    234. End Sub
    235. Sub changeValue(strFeldID)
    236. document.getElementById(strFeldID).className = "changed"
    237. strNewData = document.getElementById(strFeldID).value
    238. strFeldName = Mid(strFeldID, 2)
    239. ' Änderungen in Dictionary aufzeichnen
    240. If dictChanges.Exists(strFeldName) Then
    241. dictChanges.Remove strFeldName
    242. End If
    243. dictChanges.Add strFeldName, strNewData
    244. End Sub
    245. Sub speichereDaten(strDN)
    246. If dictChanges.Count = 0 Then
    247. MsgBox "Keine Änderungen vorhanden, die gespeichert werden können.", vbOKOnly + vbCritical, titel
    248. Exit Sub
    249. End If
    250. Set objUser = GetObject(strDN)
    251. strSAMName = objUser.sAMAccountName
    252. ' Änderungen durchführen
    253. On Error Resume Next
    254. For Each key In dictChanges.Keys
    255. If dictChanges.Item(key) <> "" Then
    256. objUser.Put key, dictChanges.Item(key)
    257. Else
    258. objUser.PutEx ADS_PROPERTY_CLEAR, key, vbNullString
    259. End If
    260. checkit "Fehler bei " & key & "!"
    261. Next
    262. objUser.SetInfo
    263. If checkit("Fehler beim Schreiben der Eigenschaften!") Then
    264. Exit Sub
    265. Else
    266. strMsg = "Änderungen erfolgreich geschrieben." & VbCrLf
    267. End If
    268. On Error Goto 0
    269. ' Oberfläche zurücksetzen
    270. For Each key In dictChanges.Keys
    271. document.getElementById("f" & key).className = ""
    272. Next
    273. ' Änderungs-Collection löschen
    274. For Each key In dictChanges.Keys
    275. dictChanges.Remove(key)
    276. Next
    277. MsgBox strMsg, vbOKOnly + vbInformation, titel
    278. End Sub
    279. Sub beschriften()
    280. parent.document.title = titel
    281. document.all.head.innerText = titel
    282. End Sub
    283. ' Fehlerprüfung
    284. Function checkit(Nachricht)
    285. checkit = False
    286. If Err.number <>0 Then
    287. Nachricht = Nachricht & " [" & Err.description & " (" & Err.number & ")]"
    288. MsgBox Nachricht, vbOKOnly+vbCritical, titel & ": Fehler!"
    289. Err.clear
    290. checkit=True
    291. End If
    292. End Function
    293. </SCRIPT>
    294. </BODY>
    295. </HTML>
    Bilder
    • Adressbuch.PNG

      53,62 kB, 1.189×709, 145 mal angesehen
    Dateien