Logo faq-o-matic.net
Logo faq-o-matic.net

Eigene Funktionen in die AD-Tools integrieren

von veröffentlicht am9. August 2003, 15:37 Uhr Kurzlink und Zitatlink einblenden
Kategorie Kategorie: Active Directory, AD-Schema, AD: Daten bearbeiten   Translate with Google Translate Translate EN   Die angezeigte Seite drucken
Zuletzt aktualisiert: 7. Oktober 2013

Das Schema ist erweitert worden. Wie können die neuen Attribute und Objekte nun genutzt werden? Ohne weiteres erst mal gar nicht. Die Verwaltungstools von Windows 2000/2003 lassen sich nicht einfach so um zusätzliche Attribute (Datenfelder) und Objektklassen erweitern. Man kann zwar durchaus neue Registerkarten einfügen, das geht aber nur über COM-Programmierung mit C++.

Wenn man sich auf einen Kompromiss einlässt, kann man aber auch mit einfacheren Methoden eine Schemaerweiterung oder eine eigene Funktion mit den Standardtools nutzen. Es ist nämlich vergleichseiwe einfach, die Kontextmenüs zu erweitern. Hierzu fügt man einen entsprechenden Eintrag im „Configuration“-Container des AD hinzu, der z. B. auf ein Skript verweist. Diese Technik setzt übrigens keine Schema-Erweiterung voraus, sondern lässt sich leicht angepasst für (fast) jedes beliebige AD-Attribut verwenden.

Ein Beispiel: Nehmen wir an, wir haben das AD um ein Attribut „Schuhgröße“ erweitert (Attributname: „sDemo-schuhgroesse“) und wollen für alle Mitarbeiter die Schuhgröße eintragen. Da scheiben wir zunächst ein kleines Skript, das per ADSI einen Wert in das Attribut „Schuhgröße“ des passenden Benutzers einträgt. Dieses Skript wird mit einem Kontextmenü aufgerufen.

Hier ein Script (als HTA [Hypertext Application], damit eine Oberfläche zur Verfügung steht – korrigierte Fassung vom 12. 9. 2005 mit Dank an Ulf B. Simon-Weidner), das eine Anzeige- und Eingabemöglichkeit vorsieht. Man beachte: Wenn ein Skript per Kontextmenü aufgerufen wird, erhält es den Namen (den DN) des Objekts als Argument übergeben. Dies wird in der Funktion „auswerten()“ ausgelesen.

  1. <HTML>
  2. <HEAD>
  3.   <TITLE></TITLE>
  4.   <HTA:APPLICATION ID=„oHTA“>
  5.   <META NAME=„author“ CONTENT=„Nils Kaczenski“>
  6. </HEAD>
  7. <BODY onload=„start();“>
  8. <H2 id=„head“></H2>
  9. <TABLE>
  10.   <TR>
  11.   <TD>Benutzer:</TD>
  12.   <TD><P id=„anzeige“></P></TD>
  13.   </TR>
  14.   <TR>
  15.   <TD>Schuh[g]röße</TD>
  16.   <TD><input id=„groesse“ accesskey=„g“></TD>
  17.   </TR>
  18.   <TR>
  19.   <TD><button onclick=„eintragen();“ accesskey=„e“><U>E</U>intragen</button></TD>
  20.   <TD><button onclick=„window.close();“ accesskey=„s“><U>S</U>chließen</button></TD>
  21.   </TR>
  22. </TABLE>
  23. <BR clear=„all“><HR><P class=„klein“2003/2005 Nils Kaczenski – keine Gewähr! Nutzung auf eigene Gefahr!</P>
  24. <SCRIPT language=„VBScript“>
  25. dim rootDSE
  26. dim objUsr
  27. dim strUser
  28. DNstrAdsPath = „“
  29. strTitel = „Demo von Nils Kaczenski“
  30. function auswerten()
  31.   strText = oHTA.CommandLine
  32.   ‚ CommandLine enthält, durch Blanks getrennt:
  33.   ‚ – Pfad der HTA-Datei (in Anführungsstrichen)
  34.   ‚ – LDAP-Pfad des AD-Objekts (fallweise mit Anführungsstrichen; inkl. Serverangabe)
  35.   ‚ – Objektklasse
  36.   ‚ Das macht die Auswertung etwas aufwändig:
  37.   intPosUser = InStrRev(strText,“ user“)
  38.   intPosLDAP = inStr(strText, „LDAP://“)
  39.   if intPosUser <> 0 then
  40.   ‚ist ein Benutzerobjekt
  41.   auswerten = mid(strText, intPosLDAP, intPosUser – intPosLDAP)
  42.   auswerten = replace(trim(auswerten),„“„“,„“)
  43.   ‚ Jetzt sind Gänsefüßchen und Leerzeichen am Anfang/Ende weg
  44.   ‚ auswertung enthält nur noch den distinguishedName,
  45.   ‚ der weiter verwendet werden kann
  46.   else
  47.   msgBox „Kein User angegeben!“
  48.   exit function
  49.   end if
  50. end function
  51. sub start()
  52.   ‚ Funktion:
  53.   ‚ Eingabeparameter:
  54.   ‚ Kommentar:
  55.   window.resizeTo 400,200
  56.   document.title = strTitel
  57.   arrText = auswerten
  58.   strUserDN = auswerten
  59.   if strUserDN = „“ then
  60.   document.all.anzeige.innerText = „keine Argumente“
  61.   exit sub
  62.   end if
  63.   set rootDSE = GetObject(„LDAP://RootDSE“)
  64.   strDomainname = rootDSE.Get(„defaultnamingcontext“)
  65.   set domain = GetObject(„LDAP://“ & strDomainname)
  66.   set objUsr = GetObject(strUserDN)
  67.   strName = objUsr.get(„displayName“)
  68.   document.title = strTitel & „: „ & strSamName
  69.   on error resume next
  70.   strSchuh = objUsr.get(„sDemo-schuhgroesse“)
  71.   if err.number <> 0 then err.clear ‚ kein Eintrag da!
  72.   on error goto 0
  73.   document.all.anzeige.innerText = strName
  74.   if strSchuh <> „“ then document.all.groesse.value = strSchuh
  75. end sub
  76. sub eintragen()
  77.   ‚ Funktion:
  78.   ‚ Eingabeparameter:
  79.   ‚ Kommentar:
  80.   if strUserDN = „“ then
  81.   msgBox „Kein User angegeben!“
  82.   exit sub
  83.   end if
  84.   strCheck = document.all.groesse.value
  85.   if isNumeric(strCheck) then
  86.   objUsr.Put „sDemo-schuhgroesse“, strCheck
  87.   objUsr.SetInfo
  88.   msgBox „Schuhgröße eingetragen!“, vbInformation, strTitle
  89.   window.close
  90.   else
  91.   msgBox „Keine Zahl angegeben: „ & strCheck, vbCritical, strTitle
  92.   end if
  93. end sub
  94. </SCRIPT>
  95. </BODY>
  96. </HTML>

Um das Skript per Kontextmenü aufzurufen, wird die AD-Konfiguration erweitert. Das folgende Skript erledigt dies. Es setzt voraus, dass das obige Skript mit dem Namen „schuhgroesse.hta“ in einem Ordner gespeichert wurde, der per PATH auflösbar ist (z. B. %systemroot%).
(Vgl. auch den Artikel: Registering a static context menu item.)

  1. Set root= GetObject(„LDAP://rootDSE“)
  2. strConfig = root.Get(„configurationNamingContext“)
  3. strPath = „LDAP://cn=user-Display,cn=407,cn=DisplaySpecifiers,“ & strConfig
  4. Set obj= GetObject(strPath)
  5. strValue = „5,Schuhgröße,schuhgroesse.hta“
  6. arrValue = Array(strValue)
  7. obj.PutEx 3, „adminContextMenu“, arrValue
  8. obj.SetInfo
  9. msgBox „Kontextmenüeintrag hinzugefügt: „ & strValue

Nun gibt es im Kontextmenü eines Benutzerkontos in den AD-Verwaltungsprogrammen den Kontextmenüpunkt „Schuhgröße“. Er ruft das Skript „schuhgroesse.hta“ auf. Dieses wiederum ermittelt den AD-Pfad des Benutzerkontos und versucht, den vorhandenen Wert für „sDemo-schuhgroesse“ zu lesen. Sollte einer vorhanden sein, wird er angezeigt. Ein neuer Wert kann eingetragen werden. (Vielen Dank an Alexander Maier für eine Korrektur.)

© 2005-2017 bei faq-o-matic.net. Alle Rechte an den Texten liegen bei deren Autorinnen und Autoren.

Jede Wiederveröffentlichung der Texte oder von Auszügen daraus - egal ob kommerziell oder nicht - bedarf der ausdrücklichen Genehmigung durch die jeweiligen Urheberinnen oder Urheber.

Das Impressum findet sich unter: http://www.faq-o-matic.net/impressum/

Danke, dass du faq-o-matic.net nutzt. Du hast ein einfaches Blog sehr glücklich gemacht!