Jump to content

P.Foeckeler

Members
  • Gesamte Inhalte

    117
  • Registriert seit

  • Letzter Besuch

Alle erstellten Inhalte von P.Foeckeler

  1. Hallo, noch eine kurze Frage zum Schluß: Bei Deinem allerersten Versuch mit dem VBScript, was hat denn da genau nicht funktioniert als Du einen anderen User verwenden wolltest? Interessiert mich brennend, da ich der Autor von dem SelfADSI-Tutorial bin, aus dem das Beispiel entnommen wurde... Eigentlich muss das nämlich sehr wohl funktionieren. Kannst Du velleicht den VBScript-Errorcode posten, der dabei auftritt??? Danke und Gruß, Philipp
  2. Hallo, ist der Benutzer, bei dem die Rechte verschwinden, vielleicht in einer der vordefinierten Gruppen "Domänen Admins", "Account Operatoren", "Server Operatoren" oder "Adminiistratoren"? Oder war er es einmal in der Vergangenheit...dann wird nämlich regelmäßig ca. einmal in der Stunde seine ACL durch die des adminSDHolder-Objektes ersetzt! Schau mal hier nach: The "Send As" right is removed from a user object after you configure the "Send As" right in the Active Directory Users and Computers snap-in in Exchange Server Gruß, Philipp
  3. Hallo, also dieser Effekt tritt oft dann auf, wenn mit der DNS-Auflösung des Fileservers (welches System mit SAN-Storage das dann auch immer sein sollte) nicht richtig konfiguriert ist, z.B. wenn es von dort aus kein Reverse Lookup gibt auf die IP-Adressen der DCs... Überprüf bitte, ob das FileServer-System von seinem TCP/IP-Einstellungen direkt diejenigen DNS-Server verwendet, in denen sich die SRV-Records der AD-DCs befinden, und dass die DCs reverse auflösbar sind. nslookup <ip-addresse-eines-dcs> Gruß, Philipp
  4. Ich nochmal: ...oder entsprechend als Array, außerdem habe ich noch ein paar LCase Aufrufe für Groß-/KleinSchreibung eingefügt... On Error Resume Next Set objSysInfo = CreateObject("ADSystemInfo") Set objNetwork = CreateObject("Wscript.Network") strUserPath = LCase(objSysInfo.UserName) OU = Array( _ "ou=data,dc=example,dc=com", _ "ou=unterOU1,ou=data,dc=example,dc=com", _ "ou=unterOU2,ou=data,dc=example,dc=com", _ "ou=benutzer,dc=example,dc=com" ) SHARE = Array( _ "\\server\OUs\ou1", _ "\\server\OUs\ou2", _ "\\server\OUs\ou3", _ "\\server\OUs\ou4" ) for i = o to UBound(OU) if (InStr(strUserPath , OU(i)) > 0 ) then objNetwork.MapNetworkDrive "S:", SHARE(i) End if next Gruß, Philipp
  5. Hallo, also du machst ja folgendes mit deinem Script: Die Gruppen des aktuellen Benutzers rausfinden Je nach Gruppe ein Laufwerk setzen So, und wenn Du das jetzt mit dem Kriterium "je-nachdem-in-welcher-OU-der USer ist", dann ist das ja keine Frage von 100en OUs (ein Benutzer kann ja nur in einer OU sein, na und dann noch logisch gesehen in den darüber liegenden, je nachdem wie man's sieht..... Also dann müßte das ungefähr so aussehen. Ein "Select Case" kann man nicht machen, sondern muss irgendwie mit der InStr Funktion rumspielen, von wegen "Wenn im LDAP-Pfad des Benutzers der LDAP-Pfad einer OU enthalten ist, dann folgende Gruppenmitgliedschaft" .... Infos zum LDAP PFad: SelfADSI : LDAP-Pfadnamen und Distinguished Names On Error Resume Next Set objSysInfo = CreateObject("ADSystemInfo") Set objNetwork = CreateObject("Wscript.Network") strUserPath = "LDAP://" & objSysInfo.UserName ou1 = "ou=data,dc=example,dc=com" ou2 = "ou=unterOU1,ou=data,dc=example,dc=com" ou3 = "ou=unterOU2,ou=data,dc=example,dc=com" ou4 = "ou=benutzer,dc=example,dc=com" '.....usw usw if (InStr(strUserPath , ou1) > 0 ) then objNetwork.MapNetworkDrive "S:", "\\server\OUs\ou1" End if if (InStr(strUserPath , ou2) > 0 ) then objNetwork.MapNetworkDrive "S:", "\\server\OUs\ou2" end if if (InStr(strUserPath , ou3) > 0 ) then objNetwork.MapNetworkDrive "S:", "\\server\OUs\ou3" end if if (InStr(strUserPath , ou4) > 0 ) then objNetwork.MapNetworkDrive "S:", "\\server\OUs\ou4" end if '....usw usw end if Gruß, Philipp
  6. Hey, also nur beim Booten.....also dann würde ich mal schwer auf meine anfängliche Vermutung tippen: Konzentrier' Dich bei der Ursachenforschung auf den Netzwerkkartentreiber. Gruß, Philipp
  7. Hallihallo, also meiner Erfahrung nach ist dies ein Problem mit dem TCP/IP-Stack, bzw. mit dem darunter liegenden Netzwerkkartentreiber. Ich bin dem schon begegnet in Fällen, in dem der NIC-Treiber wegn Negotiation (das alte Lied) noch nicht fertig initialisiert hatte, aber der DNS-Resolver bzw. der NetLogon-Dienst (der ist auf DCs zuständig) bereits sein dynamisches Update machen will... oder der Treiber hat insgesamt einen Schaden, schau mal hier nach einem Update beim Hersteller. Vielleicht ist evtl. ein Teaming (falsch) konfiguriert? Typisch wäre in diesen Fällen, dass dieser Fehler nur beim Booten der Maschine kommt. Oder kommt der Fehler permanent? (d.h. jedesmal wenn du IPCONFIG /registerdns ausführst)? In diesem Fall hilft relativ schnell ein Trace mit WireShark oder Ähnlichem, die DNS-ReRegister-Anfragen sind alle im Klartext und man sieht sehr gut was er machen will und nicht kann... :) Gruß, Philipp
  8. Hallo, bit Du Dir sicher, dass Du Deine Personalnummern in das employeeType Attribut schreiben willst? Es gbit nämlich auch noch employeeID und employeeNumber, also von weitem hören die sich irgendwie passender an...:wink2: Hier ist außerdem noch das ganze in VBScript. Wie man den Benutzer aufgrund seines Anmeldenamens findet, steht hier: SelfADSI : Name Translation - Wie man den LDAP Pfad eines Benutzers ermittelt DOMAIN = "example" 'dies ist der NetBIOS Name Deiner Domäne ANMELDENAME = "pfoeckel" 'hier den Namen des gewünschen Benutzers einsetzen TITLE = "x y z" 'das sind die Daten... PERSONALNUMMER = "0815" Const ADS_NAME_INITTYPE_GC = 3 Const ADS_NAME_TYPE_NT4 = 3 Const ADS_NAME_TYPE_1779 = 1 logonName = DOMAIN & "\" & ANMELDENAME 'NetBIOS-Anmeldename bilden Set nto = CreateObject("NameTranslate") 'Name Translate Objekt initialisieren und Namen umwandeln nto.Init ADS_NAME_INITTYPE_GC, "" nto.Set ADS_NAME_TYPE_NT4, logonName userDN = nto.Get(ADS_NAME_TYPE_1779) 'userDN enthält nun den kompletten LDAP Pfad... Set user = GetObject("LDAP://" & userDN) '...dieser kann zum Zugriff auf das Benutzerobjekt verwendet werden user.title = TITLE user.employeeType = PERSONALNUMMER user.SetInfo sollte das tatsächlich so gemeint sein, dass Deine Ausgansdaten (ANMELDENAME, PERSONALNUMMER etc... im Environment liegen, mußt Du noch das hier davorsetzen: Set wso= WScript.CreateObject(”WScript.Shell”) Set env= wso.Environment(”Process”) ANMELDENAME = env("ANMELDENAME") TITLE = env("TITLE") PERSONALNUMMER = env("PERSONALNUMMER") Schöne Grüße, Philipp
  9. Hallo benno, hmm, also ein "AccessRequest" ist bei den Standard-Attributen von AD nicht dabei, wird das vielleicht durch die Installation der Radius-Umgebung durch eine Schema-Erweiterung hinzugefügt? Von weitem ist es schwer zu sagen, wie Du damit umgehen sollst... Du mußt mal mit einem LDAP Browser (ADSIEdit, LEX, Softerra, etc.) direkt nachschauen, ob dieses Attribut bei Euren Benutzern vorhanden ist... Dann läßt es sich auch auslesen, z.B. mit einem Script oder mit DSQUERY. Gruß, Philipp
  10. Hallo, kleine Info: Details zu userAccountControl gibt's hier: SelfADSI : Attribute für AD User - userAccountControl Schau bitte nochmal genau welche Bits hier gesetzt sind... Wenn pwdLastSet = 0 ist, dann ist das Häckchen "Muß Passwort bei der nächsten Anmeldung setzen" aktiv, es ist also eigentlich normal, dass bei dem User 0 steht. Der Wert ist ein Microsoft Integer8-Zeitstempel, siehe hier: SelfADSI : Microsoft Timestamp / Interval Attribute mit Integer8 Syntax Gruß, Philipp
  11. Hallo, also wenn ich das so verstehen soll, dass Du wissen willst, ob und wann ein Benutzer im AD authentisiert wurde, dann ist es so, dass ALLE Anmeldungen, egal über welchen Kanal (Ctrl-Alt-Del an einer Station oder einem Server, NET USE übers Netz, über Radius gegen AD, pure LDAP-Verbindungen über Script etc. etc.) immer in den entsprechenden Attributen im Ad hinterlegt werden: lastLogon und lastLogonTimestamp. Es sind jedoch einige Details bei diesen Attributen zu beachten, schau am besten mal hier nach: SelfADSI : Attribute für AD User - lastLogon SelfADSI : Attribute für AD User - lastLogonTimestamp und das hier: SelfADSI : Microsoft Timestamp / Interval Attribute mit Integer8 Syntax Gruß, Philipp
  12. Hallo, sorry das ist etwas sehr unspezifisch, kannst Du nochmal beschreiben, was Du genau machen willst? Wenn Du meinst, dass ein Benutzer sich über Radius authentifiziert, meinst du damit den AD-integrierten IAS / NPS Radius? Und welche Information ist das, die Du genau herausbekommen willst? Anmeldenamen? Der müßte dem Benutzer ja bekannt sein, denn sonst hätte er sich nicht authentifizieren können. Oder willst generell Informationen anderer Objekte aus dem AD auslesen? Du siehst: Fragen über Fragen... Gruß, Philipp
  13. Hallo, also damit wir uns richtig verstehen: - Du bist lokal an einem funktionierenden DC angemeldet (evtl mit DCDIAG prüfen) - Du startest NTDSUTIL und gehst in "metatdata cleanup" - Du gibst "Connections" ein und sagst dann "connect to server xxx.example.com", wobei xxx dein eigener Server ist, an dem du gerade angemeldet bist. Und das klappt schon nicht?? - Du gehst zurück auf die "metatdata cleanup" Ebene und gehst dann in "Select Operation Target". Hier mußt du den server angeben, der entfernt werden soll. - Dann sagst du "list domains" / "select domain X". X ist hier die Nummer der Domäne in der der betreffende Server steht. - Das Gleiche mit "list naming contexts" / "select naming context X" - Das Gleiche mit "list sites" / "select site X" - Das Gleiche mit "list servers in site" / "select server X" - Dann wieder zurücj und "remove selected server" Es kommt eine Warnung, die Du bestätigtst, nachdem Du sicher bist, dass du den Server ausgewählt hast, der verschwinden soll! Gruß, Philipp
  14. Noch eine kleine Anregung hinterher: Das kostenlose Tool LIZA kann die Objektrechte im AD sehr gut analysieren: LIZA - Active Directory Analyse für Security, Berechtigungen und ACLs Gruß, Philipp
  15. Hey, dein ursprünglicher Fehler trat auf, da Du einen so genannten "serverless LDAP Bind" durchgeführt hast, also das hier: strQuery = "<LDAP://DC=AAA,DC=de>;" ... usw Das klappt aber nur in der eigenen Domäne. Wenn man an eine fremde Domäne ran will, dann muss man stets eine Netzwerkadresse eines dortigen Domänencontrollers nehmen, in deinem Fall also eines von diesen hier: strQuery = "<LDAP://dc1.aaa.de/DC=AAA,DC=de>;" ... usw oder strQuery = "<LDAP://192.168.1.1/DC=AAA,DC=de>;" ... usw oder strQuery = "<LDAP://aaa.de/DC=AAA,DC=de>;" ... usw Das letzte Beispiel (dDomänenname AAA.de wird in eine IP-Adresse eines DCs aufgelöst) klappt nur, wenn das DNS dieser Domäne korrekt aufgesetzt ist. Das hat also mit Kerberos nix zu tun. Das ":389" kannst Du bei AD stets weglassen, AD-Domänencontroller antworten IMMER auf Port 389, wenns um LDAP geht, falls du zum Global Catalog willst, dann verwende hier das strQuery = "<LDAP://dc1.aaa.de:3268/DC=AAA,DC=de>;" ... usw Alles was du brauchst, wird hier detailliert beschrieben: SelfADSI : LDAP-Pfadnamen und Distinguished Names SelfADSI : LDAP Objekte im Verzeichnis suchen mit ADO Und hier noch ein komplettes Beispiel für die Suche in anderen Domänen/Forests, du mußt nur den LDAP-Filter abändern, denn es werden dort Domänencontroller gesucht. Abschnitt heißt "Alle Domänencontroller in irgendeiner Domäne/OU finden": SelfADSI : Active Direcory Domänencontroller suchen und finden Gruß, Philipp
  16. P.Foeckeler

    dsadd

    Hey, bei Deinem zweiten Fehler sieht es so aus, dass Du in der Zeile, in der Du den MA-USer anlegen willst, ein paar %-Zeichen vergessen hättest: Deine Zeile: dsadd user CN=MA[%%e],ou=%OUD[1]%,ou=%OUC[1]%,ou=%OUB[1]%,ou=%OUA[3]%,%Stammstruktur%" -samid MAID[%%e] -upn MAID[%%e]@%DO1% -fn MAV[%%e] -mi MAIN[%%e] -ln MAN[%%e] -display "MA[%%e]" -pwd @Initialpassword -mustchpwd yes -disabled no Wahrscheinlich besser: dsadd user "CN=[color="Red"][b]%[/b][/color]MA[%%e][color="Red"][b]%[/b][/color],ou=%OUD[1]%,ou=%OUC[1]%,ou=%OUB[1]%,ou=%OUA[3]%,%Stammstruktur%" -samid MAID[%%e] -upn MAID[%%e]@%DO1% -fn MAV[%%e] -mi MAIN[%%e] -ln MAN[%%e] -display "MA[%%e]" -pwd @Initialpassword -mustchpwd yes -disabled no Nur so als Schätzung, ich weiss von solchen FOR-%%-Schleifen in DOS-Boxen sehr wenig.... Komplex ist es ja nicht, aber doch etwas umfangreicher....hast Du schonmal überlegt, es mit Powershell oder VBScript zu erledigen das ganze? :cool: Gruß, Philipp
  17. P.Foeckeler

    dsadd

    Hallo, du versuchst, die OU "OU=IDSbox,DC=IDSboxDE,DC=loc" anzulegen oder in dieser OU ein anders Objekt anzulegen. Heißt Deine Domäne denn auch IDSboxDE.loc? Die Fehlermeldung bedeutet nämlich, dass der LDAP-Pfad für die Domäne nicht korrekt ist/die Domäne nicht existiert, jedenfalls nicht aus Sicht des Domänencontrollers, an dem Du gerade angemeldet bist.... Details zum Aufbau eines korrekten LDAP-Pfads: SelfADSI : LDAP-Pfadnamen und Distinguished Names Falls IDSboxDE.loc doch der korrekte Name Deiner Domäne ist: Führst Du das Script vielleicht auf einem Rechner aus, der garnicht Mitglied in der Domäne IDSboxDE.loc ist? Gruß, Philipp
  18. Hallo ich nehme mal an, die 10.0.1.120 und 10.0.1.100 sind ehemalige DCs, du solltest die entsprechenden Einträge in der DNS-Verwaltung (dnsmgmt.msc) aus der betreffenden Zone löschen, dort findest du sie als (identisch mit übergeordnetem Order), Typ: Host (A-Record), 10.0.1.120 (identisch mit übergeordnetem Order), Typ: Host (A-Record), 10.0.1.100 Bei Abfragen an deinen Domänennamen kommen sonst in 50% der Fälle diese IPs zurück, hinter denen keine DCs (mehr) stehen. Diese Abfragen können bei der Site-Detection der Domänenmitglieder, der GPO-Verrbeitung oder insbesondere in Domänen-basiertem DFS eine Rolle spielen und dementsprechend dann Störungen verursachen. Ein falsch konfiguriertes DNS ist die URsache für die überwiegende Anzahl von AD-Problemen!! Also am besten auch allgemein mal prüfen mit DNSLint /d DomainName /ad Beschreibung des Dienstprogramms "DNSLint" Gruß, Philipp
  19. Hey, wenn du es direkt im eigenen Script machen willst, ist SelfADSI Dein Freund :cool: SelfADSI : LDAP Verzeichnisobjekte erzeugen Wenn Du das mit der "lokalen und globalen Gruppe" so gemeint hast, dass 2 Gruppen angelegt werden sollen, so geht das nicht, denn in einer OU können keine zwei gleichnaigen Objekte liegen. Ich mache in meinem Beispiel einfach mal eine globale Gruppe, die so heißt wie die OU mit angehängtem "-group". parentDN = "ou=intrust,ou=dienste,dc=tzd,dc=tbwl,dc=de" ouName = InputBox("Geben Sie den Namen der neuen OU ein","OU Name") 'OU erzeugen Set parentOU = GetObject("LDAP://" & parentDN) Set newOU = parentOU.Create("organizationalUnit", "ou=" & ouName) newOU.SetInfo 'Gruppe erzeugen ADS_GROUP_TYPE_GLOBAL_GROUP = &H00000002 ADS_GROUP_TYPE_SECURITY_ENABLED = &H80000000 Set newGroup = newOU.Create("group", "cn=" & ouName & "-group") newGroup.sAMAccountName = ouName & "-group" newGroup.groupType = ADS_GROUP_TYPE_GLOBAL_GROUP Or ADS_GROUP_TYPE_SECURITY_ENABLED newGroup.SetInfo '30 User erzeugen und zur Gruppe hinzufügen for i=0 to 29 Set newUser = newOU.Create("user", "cn=User" & i) newUser.sAMAccountName = "User" & i newUser.userAccountControl = 544 '512 + 32 = Normal Account / Password not required newUser.SetInfo newGroup.Add(newUser.AdsPath) next Also bei mir läuft's durch... Gruß, Philipp
  20. ...oder umrechnen im eigenen Script: SelfADSI : Microsoft Timestamp / Interval Attribute mit Integer8 Syntax Gruß, Philipp
  21. Hmm, also ein Array könntest Du innerhalb des Scripts schon aufbauen, dass würde dann so aussehen: myArray = Array() Set ou = GetObject("LDAP://apjet01.test.de/ou=AVB,ou=BE,ou=MUE,dc=test,dc=de") For Each obj In ou WScript.Echo obj.name Redim Preserve myArray(Ubound(myArray)+1) ' ...das Array vergrössern myArray(Ubound(myArray)) = obj.name ' ...und ein neues Element hinzu Next Aber Du hast dann wahrscheinlich Schwierigkeiten das Array mit einem anderen zu vergleichen innerhalb von vbscript... Wie wäre es denn, wenn Du die Ausgabe Deines ursprünglichen Scripts in eine Datei umleitest: c:\> cscript test.vbs >Ausgabe.txt in Ausgabe.txt stehen jetzt alle Usernamen, die Du in den OUs gefunden hast. Die kannst du dann mit SORT sortieren und hast eine Liste, die du vergleichen kannst mit sonstwas... Gruß, Philipp
  22. Hallo, ich auch nochmal, also Du kannst den Wert von pwdLastSet auch garnicht auf einen bestimmten Wert ändern, selbst wenn du den korrekten Integer8-Wert eines bestimmten Datums hast. Nur die Werte 0 und -1 sind erlaubt, ansonsten gibt's ein Fehler DSID-031A0FB6 Invalid Argument... Wenn Du eine W2K8 Umgebung hast, dann setz eine Fine Grained Password Policy und lass für deinen einen Testuser das PAsswort in einem Tag ablaufen....Ansonsten setzt Du Dir tatsächlich lieber mal kurz ein Test-AD auf, in dem du die Domain Paswortrichtlinien setzen kannst. Gruß, Philipp
  23. Hallo, eine schöne Anlaufstelle für Scripting-Aufgaben im AD wäre das SelfADSI Scripting Tutorial: SelfADSI : Das ADSI Scripting Tutorial / Das LDAP Scripting Tutorial Gruß, Philipp
  24. Hallo, du willst wahrscheinlich nach etwas suchen, von dem du nicht weißt in welchem Attribut es gespeichert wird..... eines derartige LDAP-Search Anfrage ist nicht vorgesehen. Allerdings könntest du mit LDIFDE.EXE einen Export aller Objekte inklusive aller Attribute machen und die dadurch erzeugte Text-Datei dann durchsuchen. Da fehlen zwar dann die Operational Attributes, aber die willst Du wahrscheinlich gar nicht sehen... Gruß, Philipp
  25. Hallo, also: Wann ein Benutzer das letzte Mal sein Passwort verändert hat, steht im Attribut pwdLastSet. Das Format ist leider das ziemlich schlecht lesbare Microsoft Integer8 (100-Nanosekunden-Abschnitte seit 1.1.1600!). Aber hier siehst du, wie man es umrechnen kann: SelfADSI : Microsoft Timestamp / Interval Attribute mit Integer8 Syntax Dann brauchst du noch das maximale Passwort-alter der Domäne, damit du das Ablaufdatum für jeden Benutzer errechnen kannst. Das steht (in der Default Domain Policy - und auch) im Domänenobjekt in der eigenschaft maxPwdAge. Auch dies ist Integer8, negativer Wert der 100 Nanosekunden-Abschnitte.... Naja, ein bisschen rumgerechnet, das alles mit einer ADO-Suche auf AD User gekoppelt - und das VB Script hier spuckt Dir Deine Liste bzgl. Passwort-Setzen aus: ldapFilter = "(sAMAccountType=805306368)" ' <- User-Objekte Set rootDSE = GetObject("LDAP://rootDSE") domainDN = rootDSE.Get("defaultNamingContext") Set objDomain = GetObject("LDAP://" & domainDN) Set interval = objDomain.maxPwdAge domainPwAge = LargeIntegerToMinutes(interval) WScript.Echo "Maximales Passwortalter ist: " & (domainPwAge/1440) & " Tage" WScript.Echo Set ado = CreateObject("ADODB.Connection") ado.Provider = "ADSDSOObject" ado.Open "ADSearch" Set objectList = ado.Execute("<LDAP://" & domainDN & ">;" & ldapFilter & ";distinguishedName,pwdLastSet;subtree") While Not objectList.EOF pWSetValue = objectList.Fields("pwdLastSet") pwLastSet = LargeIntegerToDate(pWSetValue) pwNextSet = DateAdd("n", domainPwAge, pwLastSet) WScript.Echo objectList.Fields("distinguishedName") & " : " & pwLastSet & " : " & pwNextSet objectList.MoveNext Wend '____________________ [ LargeIntegerToDate ] ' ' Function LargeIntegerToDate(value) 'nimmmt einen Microsoft LargeInteger Wert (Integer8) und gibt das entsprechende Datum plus Uhrzeit zurück Set sho = CreateObject("Wscript.Shell") timeShiftValue = sho.RegRead("HKLM\System\CurrentControlSet\Control\TimeZoneInformation\ActiveTimeBias") If IsArray(timeShiftValue) Then timeShift = 0 For i = 0 To UBound(timeShiftValue) timeShift = timeShift + (timeShiftValue(i) * 256^i) Next Else timeShift = timeShiftValue End If i8High = value.HighPart i8Low = value.LowPart If (i8Low < 0) Then i8High = i8High + 1 End If If (i8High = 0) And (i8Low = 0) Then LargeIntegerToDate = #1/1/1601# Else LargeIntegerToDate = #1/1/1601# + (((i8High * 2^32) + i8Low)/600000000 - timeShift)/1440 End If End Function '_____________________________ [ LargeIntegerToMinutes ] ' ' Function LargeIntegerToMinutes(value) 'nimmmt einen Microsoft LargeInteger Wert (Integer8) und gibt das entsprechende ... '... Zeitinterval in Minuten zurück (-1 für "Never") If (value.HighPart = -2147483648) And (value.LowPart = 0) then LargeIntegerToMinutes = -1 Else i8High = value.HighPart i8Low = value.LowPart If (i8Low < 0) Then i8High = i8High + 1 End If LargeIntegerToMinutes = -(((i8High * 2^32) + i8Low)/600000000) End If End Function Vorsicht, wenn du >1000 Benutzer hast, dann mußt Du eine PagedResults-Suche durchführen. Dann muß nochmal ein bisschen verändert werden, siehe hier: SelfADSI : LDAP Objekte im Verzeichnis suchen mit ADO Gruß, Philipp
×
×
  • Neu erstellen...