farelm
Goto Top

VisualStudio 2008 WinServer2003 - userAccountControl nicht setzbar.

Hi Leute, folgende Ausgangssituation:

Ich programmiere (noch immer) ein Programm dass das Anlegen von Usern im AD vereinfacht (zB man kann gemütlich extensionAttribute10 setzen und so).
Ich entwickle auf einem Windows SBS Server 2003 R2 Premium 32bit mit VisualStudio 2008 Express.
Ausgeführt wird das ganze auf unserem Life-System, einen WindowsServer 2003 Standard 64bit ausgeführt.
Beide Maschienen verfügen über .NET 3.5

Nun zum Problem. Programm funktioniert soweit super. Nur der Accountstatus (attribut heißt im ADSI "userAccountControl" wird auf dem Life-System nicht gesetzt, dafür kommt eine Fehlermeldung "The Server is unwilling to process the Request". Der User wird dann, je nachdem in welcher Zeile der Code steht trotzdem angelegt oder nicht, allerdings wird die userAccountControl auf 546 gesetzt (was soviel heißt wie dass man kein PW zum einloggen braucht = schlecht).

Kann mir irgendjemand sagen, wie ich dieses Attribut trotzdem setzen kann?
Liegts vielleicht daran dass das eine 32 und das andere 64bit ist? Warum funktioniert dann nur das nicht?


Hier ein paar sachen wie ich es probiert habe:


objChild.Properties("UserAccountControl").Add(512)  
objChild.CommitChanges()
_________________________

objChild.Properties("UserAccountControl").Add("512")  
objChild.CommitChanges()
_________________________
Dim exp As Integer = CInt(objChild.Properties("userAccountControl").Value)  
objChild.Properties("userAccountControl").Value = exp Or &H200  
objChild.CommitChanges()
objChild.Properties("userAccountControl").Value = exp And Not &H2  
objChild.CommitChanges()

Content-Key: 85644

Url: https://administrator.de/contentid/85644

Printed on: April 20, 2024 at 05:04 o'clock

Member: FarelM
FarelM Apr 16, 2008 at 12:46:05 (UTC)
Goto Top
Ich hab nun eine - in meinen Augen zwar nicht optimale - aber funktionierende Lösung gefunden.

Wenn der User fertig angelegt wurde, wird er nochmal gesucht, das Attribut wird geleert und dann neu gesetzt:

    'Accoun-Status festlegen  
    Public Sub AccountStatus()
        Try 'Hier wird der Account-Status gesetzt  
            Dim searcher As New System.DirectoryServices.DirectorySearcher() 'Suchfunktion  
            searcher.Filter = "(&(objectClass=user)(objectCategory=person)(sAMAccountName=" & txt_logonname.Text & "))" 'Suchkriterien  
            searcher.PropertiesToLoad.Add("adspath")  
            Dim Result As System.DirectoryServices.SearchResult = searcher.FindOne()
            Dim dirEntryResults As New DirectoryServices.DirectoryEntry(Result.Path)
            MsgBox(Result.Path.ToString())
            dirEntryResults.Properties("userAccountControl").Clear()  

            If chb_accountactivate.Checked = True Then
                dirEntryResults.Properties("userAccountControl").Add("512")  
                dirEntryResults.CommitChanges()
            Else
                dirEntryResults.Properties("userAccountControl").Add("514")  
                dirEntryResults.CommitChanges()
            End If
        Catch ex As Exception
            MsgBox("Beim setzen des Account-Status ist ein Fehler aufgetreten:" & Environment.NewLine & Environment.NewLine & ex.Message)  
        End Try

    End Sub

Warum das nun vorher am SBS funktionert hat, am anderen Server aber nicht weiß ich nach wie vor nicht, aber es funktioniert.

Vielleicht hilft das hier ja mal jemandem.