Håller på att försöka få lite grepp på hur man uppdaterar AD , kan läsa från AD så långt är det ok. Ja, att läsa AD:t är behöver man inga rättigheter till men däremot att skriva kräver rättigheter. Det kontot som du sätter upp bör du hålla hårt i. När du skriver får du därmed skicka med dessa credentials för att få rätten att skriva. Tack för ditt svar pelle. Men har fortfarande inte lyckas skriva något till AD:et. Hur skriver jag om koden för att sätta credentials så att det funkar? Funderar även på vilka settings jag ska ha i web.config ? Ska man köra med impersonation ? Dvs <identity impersonate="true"/> om jag förstått det rätt? Eller kanske inte behövs? Jag har lite kod på jobbet, skall fixa det i morgon. Där skriver jag till kommentarsfältet för vissa användare. Återkommer... Det här exemplet söker på ett datornamn i AD:t och hämtar sedan ut den specifika posten och därefter uppdater informationen i fältet Description. Tack Pelle , jag sitter med C# hade lite prob att tolka , jag är rätt grön i att sitta med ASP.NET, men har för mig att det finns en konvertingsmöjlighet i visual studio mellan Visual Basic <-> C# ? Hur gör man i så fall..hittade inte den funktionen i Visual studio?Hur ändra värde i Active Directory ?
Men vill uppdatera proporties, försöker enligt koden nedan , men Properties["mail"].Value blir inte uppdaterat med testar, nån som vet varför o hur ändrar man koden enklast? Behörighetsprob?
Grymt tacksam för hjälp
<code>
DirectoryEntry entry = new DirectoryEntry("LDAP://OU=Y,DC=X,DC=X");
DirectorySearcher mySearcher = new DirectorySearcher(entry);
Response.Write(mySearcher.FindAll().Count);
DirectoryEntry updateEnt;
foreach (System.DirectoryServices.SearchResult resEnt in mySearcher.FindAll())
{
try
{
Response.Write(resEnt.GetDirectoryEntry().Properties["mail"].Value.ToString() + "<br>");
updateEnt = resEnt.GetDirectoryEntry();
updateEnt.Properties["mail"].Value = "testing";
updateEnt.CommitChanges();
}
catch (Exception ex)
{
;
}
}
</code>Sv: Hur ändra värde i Active Directory ?
Sv:Hur ändra värde i Active Directory ?
Vilket mode ska de vara på <authentication mode= ? Just nu har jag inte satt authentication mode i config, antar att det är windows mode default i så fall?
Min kod ser för tillfället ut på följande vis:
<code>
string lDAPString = "LDAP://domän";
DirectoryEntry entry = new DirectoryEntry(lDAPString, "Administratör", "Ettlösenord", AuthenticationTypes.Secure);
DirectorySearcher mySearcher = new DirectorySearcher(entry);
mySearcher.Filter = "(cn=lofvenius)";
Response.Write(mySearcher.FindAll().Count); //skriver ut 1
DirectoryEntry updateEnt;
foreach (System.DirectoryServices.SearchResult resEnt in mySearcher.FindAll())
{
resEnt.GetDirectoryEntry().Properties["mail"].Value = "Bertil";
resEnt.GetDirectoryEntry().CommitChanges();
//uppdateras inte....
}
</code>
Funkar att logga in o läsa, men fortfarande inte att skriva till AD:et trots att jag loggat in som administratör? Är alltså credentials ? Tacksam för hjälp...Sv: Hur ändra värde i Active Directory ?
Sv:Hur ändra värde i Active Directory ?
Imports System.DirectoryServices
Imports System.Security.Principal
Imports System.Security.Permissions
Imports System.DirectoryServices.ResultPropertyCollection
Imports System.Net
Dim username As String = "user"
Dim password As String = "pass"
Dim objSearch As New DirectorySearcher
objSearch.SearchRoot = New DirectoryEntry("LDAP://adsth001/dc=sweco,dc=se", username, password)
objSearch.Filter = "(&(objectClass=computer)(objectcategory=*)(cn=" & computername & "))" ' pekar på en specifik computername
objSearch.SearchScope = SearchScope.Subtree
objSearch.PageSize = 100
objSearch.ReferralChasing = ReferralChasingOption.All
objSearch.PropertiesToLoad.AddRange(New String() {"cn", "name", "displayname", "description"})
Dim objsearchresult As SearchResultCollection
Try
objsearchresult = objSearch.FindAll()
Catch ex As SystemException
Console.WriteLine("Kan inte söka i ad-t: " & ex.Message)
End
End Try
Dim result As SearchResult
Dim cnt As Integer = 0
For Each result In objsearchresult
Try
'Console.WriteLine("Description i AD:" & result.Properties("description")(0))
If result.Properties("name")(0) = computername Then
cnt = 1
Dim objUser As DirectoryEntry = New DirectoryEntry(result.Path, username, password, AuthenticationTypes.Secure)
Try
With objUser.Properties
Console.WriteLine(vbCrLf & "Description i ad före skrivning -->" & .Item("Description").Value)
.Item("Description").Value = "Här skrivs värdet i fältet Description"
End With
objUser.CommitChanges()
Catch ex As SystemException
System.Environment.ExitCode = 54
Console.WriteLine("Fel: kan inte skriva i AD:" & ex.Message)
End
Finally
objUser.Close()
End Try
End If
Catch ex As SystemException
System.Environment.ExitCode = 55
Console.WriteLine("Fel, kan inte finna property 'name' i registerposten." & ex.message)
' // hittade inte någon träff alls
End Try
Next
Sv: Hur ändra värde i Active Directory ?
F.ö så funkar det till slut att uppdatera , gjorde på följande vis (kanske hjälper nån annan med samma prob):
DirectoryEntry entry = new DirectoryEntry(path, "användarnamn", "lösenord");
Object native = entry.NativeObject; // denna rad gjorde det möjligt att uppdatera för min del, forcar en authentication
Sv: Hur ändra värde i Active Directory ?
Catch ex As SystemException
Men Pelle då, det där är ju inte direkt snygg kod! :)