Basierend auf dem Artikel „Eigene Funktionen in die AD-Tools integrieren“ von Nils habe ich das dort vefügbare Beispiel erweitert. Zweck dieser Erweiterung ist es, das extensionAttribute3 modifzieren zu können. Im konkreten Fall wird dieses Attribut genutzt, um eine Kostenstellenzuordnung für eine Cisco-VOIP-Telefonanlage zu schaffen.
Ziel ist es, diese Kostenstelle mittels Kontextmenü direkt über das Nutzerobjekt in Active Directory modifizieren zu können. Hierzu zählt auch die Möglichkeit, einen einmal gesetzten Wert auch komplett löschen zu können.
Das folgende Skript speichert man als extension3.hta z. B. unter c:\windows\system32 ab.
Die Löschroutine löscht den gesetzten Wert ohne nochmalige Sicherheitsabfrage. Also bitte aufpassen. 😉
——– Extension3.hta —————-
- <HTML>
- <HEAD>
- <TITLE></TITLE>
- <HTA:APPLICATION ID=„oHTA“>
- <META NAME=„author“ CONTENT=„Nils Kaczenski und Norbert Fehlauer“>
- </HEAD>
- <BODY onload=„start();“>
- <H2 ID=„head“></H2>
- <TABLE>
- <TR>
- <TD>Benutzer:</TD>
- <TD><P ID=„anzeige“></P></TD>
- </TR>
- <TR>
- <TD>[K]ostenstelle</TD>
- <TD><input ID=„Kosten“ accesskey=„k“></TD>
- </TR>
- <TR>
- <TD><button onclick=„eintragen();“accesskey=„e“><U>E</U>intragen</button></TD>
- <TD><button onclick=„window.close();“accesskey=„s“><U>S</U>chließen</button></TD>
- <TD><button onclick=„loeschen();“accesskey=„l“><U>L</U>öschen</button></TD>
- </TR>
- </TABLE>
- <BR clear=„all“>
- <HR>
- <P Class=„klein“>© 2003–2007 Nils Kaczenski und Norbert Fehlauer – keine Gewähr! Nutzung auf eigene Gefahr!</P>
- <SCRIPT language=„VBScript“>
- Dim rootDSE
- Dim objUsr
- dim strUserDN
- const ADS_PROPERTY_CLEAR = 1
- strAdsPath = „“
- strTitel = „Kostenstelle eintragen“
- Function auswerten()
- strText = oHTA.CommandLine
- ‚ CommandLine enthält, durch Blanks getrennt:
- ‚ – Pfad der HTA-Datei (in Anführungsstrichen)
- ‚ – LDAP-Pfad des AD-Objekts (fallweise mit Anführungsstrichen; inkl.Serverangabe)
- ‚ – Objektklasse ‚ Das macht die Auswertung etwas aufwändig:
- intPosUser = InStrRev(strText,“ user“)
- intPosLDAP = inStr(strText, „LDAP://“)
- if intPosUser <> 0 then ‚ist ein Benutzerobjekt
- auswerten = mid(strText, intPosLDAP, intPosUser – intPosLDAP)
- auswerten = replace(trim(auswerten),„“„“,„“)
- ‚ Jetzt sind Gänsefüßchen und Leerzeichen am Anfang/Ende weg
- ‚ auswertung enthält nur noch den distinguishedName,
- ‚ der weiter verwendet werden kann
- else
- msgBox „Kein User angegeben!“
- exit function
- end if
- End Function
- Sub start()
- ‚ Funktion:
- ‚ Eingabeparameter:
- ‚ Kommentar:
- window.resizeTo 400,200
- document.title = strTitel
- arrText = auswerten
- strUserDN = auswerten
- if strUserDN = „“ then
- document.all.anzeige.innerText = „keine Argumente“
- Exit Sub
- End If
- Set rootDSE = GetObject(„LDAP://RootDSE“)
- strDomainname = rootDSE.Get(„defaultnamingcontext“)
- Set domain = GetObject(„LDAP://“ & strDomainname)
- Set objUsr = GetObject(strUserDN)
- strName = objUsr.get(„displayName“)
- document.title = strTitel & „: „ & strSamName
- On Error Resume Next
- strKostenstelle = objUsr.get(„extensionAttribute3“)
- if err.number <> 0 then Err.clear ‚ kein Eintrag da!
- On Error Goto 0
- document.all.anzeige.innerText = strName
- if strKostenstelle <> „“ then document.all.Kosten.value = strKostenstelle
- End Sub
- Sub eintragen()
- ‚ Funktion:
- ‚ Eingabeparameter:
- ‚ Kommentar:
- If strUserDN = „“ Then
- MsgBox „Kein User angegeben!“
- Exit Sub
- End If
- strCheck = document.all.Kosten.value
- If IsNumeric(strCheck) Then
- objUsr.Put „extensionAttribute3“, strCheck
- objUsr.SetInfo
- MsgBox „Kostenstelle eingetragen!“, vbInformation, strTitle
- window.close
- Else
- MsgBox „Keine Zahl angegeben: „ & strCheck, vbCritical, strTitle
- End If
- End Sub
- Sub loeschen()
- ‚ Funktion:
- ‚ Eingabeparameter:
- ‚ Kommentar:
- If strUserDN = „“ Then
- MsgBox „Kein User angegeben!“
- Exit Sub
- End If
- objUsr.PutEx ADS_PROPERTY_CLEAR, „extensionAttribute3“, vbNullString
- objUsr.SetInfo
- MsgBox „Kostenstelle gelöscht!“, vbInformation, strTitle
- window.close
- End Sub
- </SCRIPT>
- </BODY>
- </HTML>
——– Extension3.hta —————-
Mit folgendem Script wird die extension3.hta im Rechtsklickmenü verfügbar. Hierzu adminmenu.vbs ausführen. Der Wert „strValue“, der angibt, wie der Menüpunkt heißen soll, muss entsprechend angepasst werden.
——— Adminmenu.vbs ———————
- Set root= GetObject(„LDAP://rootDSE“)
- strConfig = root.Get(„configurationNamingContext“)
- strPath = „LDAP://cn=user-Display,cn=407,cn=DisplaySpecifiers,“ & strConfig
- Set obj= GetObject(strPath)
- strValue = „5,Kostenstelle modifizieren,Extension3.hta“
- arrValue = Array(strValue)
- obj.PutEx 3, „adminContextMenu“, arrValue
- obj.SetInfo
- msgBox „Kontextmenüeintrag hinzugefügt: „ & strValue
http://faq-o-matic.net/?p=617