Jump to content

VB AD Benutzer Account auslesen und ändern


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo,

 

ich würde gerne das aktuelle Expiration Date von verschiedenen Accounts aus der AD holen.

Es soll zusätzlich die Möglichkeit bestehen, ein neues Auslaufdatum einzugeben, um einen Account aktivieren zu können.

 

Ich habe bislang folgenden Ansatz verfolgt:

Dim Benutzer() as String = {"User1", "User2"}
' Verbindung mit dem DC herstellen.
       Dim Server As New PrincipalContext(System.DirectoryServices.AccountManagement.ContextType.Domain, "DomainController")
       ' Ein leeres Benutzerobjekt erstellen.
       Dim User As New UserPrincipal(Server)

       For i As Integer = 0 To Benutzer.Length - 1
           ' Suchkriterien zusammenstellen.
           User.SamAccountName = Benutzer(i)

           ' Filterobjekt erstellen, und zuweisen.
           Dim Filter As New PrincipalSearcher()
           Filter.QueryFilter = User

           ' Das Ergebnis in Result speichern.
           Dim Result As PrincipalSearchResult(Of Principal) = Filter.FindAll()

           ' In der Variable u sind alle Eigenschaften des Benutzerkontos enthalten.

           Select Case Benutzer(i)
               Case "User1"
                   Label17.Text = User.AccountExpirationDate.ToString

               Case "User2"
                   Label16.Text = User.AccountExpirationDate.ToString
           End Select
       Next

aber die Felder sind immer leer.

Wenn ich in Result Nachschaue, dann gibtr es da ein ... ahm, wie nennt mans ... Untermenü, oder so, System.directoryServices.AccountManagement.UserPrincipal, dort sind alle benötigten Infos drinn, aber wie komm ich da dran?

 

Kann mir hier jemand weiterhelfen?

 

Vielen Dank!

Link zu diesem Kommentar

Ich habe jetzt kein VB Runtime hier, kann es also nicht testen.

Aber warum erstellst du erst ein leeres Benutzerobjekt, um es dann zu füllen?

 

Hier steckt vermutlich der Fehler:

' Filterobjekt erstellen, und zuweisen.
Dim Filter As New PrincipalSearcher()
Filter.QueryFilter = User

 

Du weist hier dem Filter ein leeres Objekt zu, guck dir mal beim LDAP Syntax die Filterfunktion an.

 

Weiter unten willst du aus dem User-Objekt deine Werte auslesen, du weist aber nirgens dem User-Objekt das Result-Set zu.

 

Alles in allem ein bisschen durcheinander.

 

Andere Frage. Muss es VB sein, oder könntest du auch mit was anderem leben?

Link zu diesem Kommentar

Hallo Mamamia,

 

vielen Dank für deine Antwort.

Das Durcheinander kommt daher, dass ich mich da erst gerade einarbeite und solche Sachen dann über Google und Coppy&Paste, also trial and error, löse.

 

Wie weist man dem User-Objekt nun einen Benutzer zu?

Ich würde da ja gerne in der Schleife mehrere Benutzer sequentiell verarbeiten.

 

Ich habe hier noch einen Artikel gefunden, aber dort wird es wieder ganz anderst gelöst.

 

Geht das auf "meinenm" Weg auch?

 

Vielen Dank!

 

edit:

 

bin etwes weiter:

    Dim UserID As String
       Dim RootDSE As New DirectoryServices.DirectoryEntry("LDAP://RootDSE")
       Dim DomainDN As String = RootDSE.Properties("DefaultNamingContext").Value
       Dim ADEntry As New DirectoryServices.DirectoryEntry("LDAP://" & DomainDN)


       Dim objSearch As New System.DirectoryServices.DirectorySearcher(ADEntry)
       'Dim ADSearchResult As System.DirectoryServices.SearchResult
       Dim oResults As DirectoryServices.SearchResultCollection
       Dim oResult As DirectoryServices.SearchResult
       'Dim myresults As String
       Dim i As Integer

       i = 1

       UserID = "schmidt"
       objSearch.PropertiesToLoad.Add("uid")
       objSearch.PropertiesToLoad.Add("givenname")
       objSearch.PropertiesToLoad.Add("cn")
       objSearch.PropertiesToLoad.Add("AccountExpirationDate")
       objSearch.Filter = ("(samAccountName=*" & UserID & "*)")
       oResults = objSearch.FindAll

       For Each oResult In oResults
           Label10.Text = oResult.GetDirectoryEntry.Properties("cn").Value.ToString
           MsgBox(oResult.GetDirectoryEntry.Properties("cn").Value.ToString)
           MsgBox(oResult.GetDirectoryEntry.Properties("AccountExpirationDate").Value.ToString)
           i = i + 1
       Next

so sollte ich doch auf das Auslaufdatum zugreiffen können, oder?

den Namen gibt er jetzt richtig aus.

bearbeitet von nahemoth
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...