Laden...

Active Directory | Verschiebung von Objekten

Erstellt von TomSchmitz vor einem Monat Letzter Beitrag vor einem Monat 147 Views
TomSchmitz Themenstarter:in
15 Beiträge seit 2022
vor einem Monat
Active Directory | Verschiebung von Objekten

Mein Fehler ist: Es wurde eine ungültige dn-Syntax angegeben.

Detailed: 00002125: NameErr: DSID-031B0344, problem 2006 (BAD_NAME), data 0, best match of:
'CN=TestRechner,OU=KOM,OU=ASS-Clients,DC=DOMASS,DC=local'

Ein Computer in CN=Computers,DC=DOMASS,DC=local soll nach OU=KOM,OU=ASS-Clients,DC=DOMASS,DC=local

Mein Code:


public async Task<ServiceResponse> AssignNewWorkstation(AssignNewWorkstation assignNewWorkstation)
{
   try
   {
       DirectoryEntry computerEntry = new DirectoryEntry("LDAP://CN=Computers,DC=DOMASS,DC=local", _user, _password);
       computerEntry.AuthenticationType = AuthenticationTypes.Secure;
       DirectorySearcher computerSearcher = new DirectorySearcher(computerEntry);
       computerSearcher.Filter = $"(&(objectClass=computer)(cn={assignNewWorkstation.WorkstationName}))";
       SearchResult computerResult = computerSearcher.FindOne();
       if (computerResult != null)
       {
           DirectoryEntry computer = computerResult.GetDirectoryEntry();
           DirectoryEntry newParent = new DirectoryEntry($"LDAP://OU=KOM,OU=ASS-Clients,DC=DOMASS,DC=local", _user, _password);
           computer.MoveTo(newParent);
           if (assignNewWorkstation.AssignAutomatically)
           {
               DirectoryEntry ouEntry = new DirectoryEntry("LDAP://OU=ASS-Benutzer,DC=DOMASS,DC=local", _user, _password);
               ouEntry.AuthenticationType = AuthenticationTypes.Secure;
               DirectorySearcher userSearcher = new DirectorySearcher(ouEntry);
               userSearcher.Filter = "(objectClass=user)";
               SearchResultCollection userResults = userSearcher.FindAll();
               foreach (SearchResult userResult in userResults)
               {
                   DirectoryEntry user = userResult.GetDirectoryEntry();
                   object userWorkstations = user.Properties["userWorkstations"].Value;
                   string updatedValue = (userWorkstations != null) ? userWorkstations.ToString() + "," + assignNewWorkstation.WorkstationName : assignNewWorkstation.WorkstationName;
                   user.Properties["userWorkstations"].Value = updatedValue;
                   user.CommitChanges();
                   user.Close();
               }
               ouEntry.Close();
           }
           computer.Close();
           return new ServiceResponse { StatusCode = 200, Message = $"Successfully moved the computer to {assignNewWorkstation.OU} and added it to users in the OU." };
       }
       else
       {
           return new ServiceResponse { StatusCode = 404, Message = "Computer not found." };
       }
   }
   catch (Exception ex)
   {
       Logger.Log(ex.ToString(), Logger.LogPriority.Error);
       return await ErrorHandler.ThrowErrorAsync(500);
   }
}

Die Variable computer ist auch gefüllt. Sprich, er findet den Comuter in LDAP://CN=Computers,DC=DOMASS,DC=local

Er fliegt bei

computer.MoveTo(newParent);

Wenn man etwas nicht einfach erklären kann, hat man es nicht verstanden.

-Albert Einstein

TomSchmitz Themenstarter:in
15 Beiträge seit 2022
vor einem Monat
Lösung

Kurzer Edit an der Stelle. 
Ich habe das Ganze mal andersherum getestet. Komischerweise kann ich Computer so verschieben.. Bedeutet also, dass er mir den falschen Fehler wirft. Er hat dazu schlichtweg keine Berechtigungen. Wenn ich nämlich versuche manuell im ADExplorer zu verschieben, bekomme ich den Fehler "Zugriff verweigert".

Wenn man etwas nicht einfach erklären kann, hat man es nicht verstanden.

-Albert Einstein