Ho un set di account di prova che verranno creati ma gli account verranno configurati per richiedere la modifica della password al primo accesso. Voglio scrivere un programma in C# per passare attraverso gli account di prova e cambiare le password.Come cambiare la password di Active Directory a livello di programmazione
risposta
È possibile utilizzare il metodo di UserPrincipal classe SetPassword, purché si disponga di privilegi sufficienti, una volta trovato l'oggetto UserPrincipal corretta. Utilizzare FindByIdentity per cercare l'oggetto principale in questione.
using (var context = new PrincipalContext(ContextType.Domain))
{
using (var user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, userName))
{
user.SetPassword("newpassword");
// or
user.ChangePassword("oldPassword", "newpassword");
}
}
Ecco una grande programmazione Active Directory riferimento rapido:
Howto: (Almost) Everything In Active Directory via C#
vedere il codice di reimpostazione password vicino alla fine.
public void ResetPassword(string userDn, string password)
{
DirectoryEntry uEntry = new DirectoryEntry(userDn);
uEntry.Invoke("SetPassword", new object[] { password });
uEntry.Properties["LockOutTime"].Value = 0; //unlock account
uEntry.Close();
}
ecco la soluzione:
string newPassword = Membership.GeneratePassword(12, 4);
string quotePwd = String.Format(@"""{0}""", newPassword);
byte[] pwdBin = System.Text.Encoding.Unicode.GetBytes(quotePwd);
UserEntry.Properties["unicodePwd"].Value = pwdBin;
UserEntry.CommitChanges();
Nel mio caso, ricevo il messaggio: "Il server non è disposto ad elaborare la richiesta". – Samuel
provare questo codice. Funziona per me,
public void ChangeMyPassword(string domainName, string userName, string currentPassword, string newPassword)
{
try
{
string ldapPath = "LDAP://192.168.1.xx";
DirectoryEntry directionEntry = new DirectoryEntry(ldapPath, domainName + "\\" + userName, currentPassword);
if (directionEntry != null)
{
DirectorySearcher search = new DirectorySearcher(directionEntry);
search.Filter = "(SAMAccountName=" + userName + ")";
SearchResult result = search.FindOne();
if (result != null)
{
DirectoryEntry userEntry = result.GetDirectoryEntry();
if (userEntry != null)
{
userEntry.Invoke("ChangePassword", new object[] { currentPassword, newPassword });
userEntry.CommitChanges();
}
}
}
}
catch (Exception ex)
{
throw ex;
}
}
Questo è il metodo migliore per modificare la password da un'app Web. Non crea una cartella utente sul server e cambia la password anziché un ripristino dell'amministratore. Motivi per cui questo è utile elencati qui. https://stackoverflow.com/questions/17493571/directoryservices-userprincipal-setpassword-ignores-password-policy-password-hi – BinaryPatrick
È possibile impostare una nuova password per un account di dominio, utilizzando .NET Framework 2.0. Vedere codice funzionante sotto:
string domainfqdn="mydomain.test.gov" //fqdn of the domain
string ldapPath =GetObjectDistinguishedName (objectClass.user,returnType.distinguishedName, args[0].ToString(),domainfqdn);
ldapPath="LDAP://" + domainfqdn + :389/"+ldapPath;
DirectoryEntry uEntry = new DirectoryEntry(ldapPath,null,null,AuthenticationTypes.Secure);
uEntry.CommitChanges();
Console.WriteLine(ldapPath);
string password="myS3cr3tPass"
uEntry.Invoke("SetPassword", new object[] { password });
uEntry.Properties["LockOutTime"].Value = 0; //unlock account
uEntry.CommitChanges();
uEntry.Close();
è molto importan per verificare i parametri a uEntry, il codice verrà eseguito nel contesto di protezione thread corrente, a meno che non vengono specificati i valori nulli
public void ResetPassword(string userName, string Password, string newPassword)
{
try
{
DirectoryEntry directoryEntry = new DirectoryEntry(Path, userName, Password);
if (directoryEntry != null)
{
DirectorySearcher searchEntry = new DirectorySearcher(directoryEntry);
searchEntry.Filter = "(samaccountname=" + userName + ")";
SearchResult result = searchEntry.FindOne();
if (result != null)
{
DirectoryEntry userEntry = result.GetDirectoryEntry();
if (userEntry != null)
{
userEntry.Invoke("SetPassword", new object[] { newPassword });
userEntry.Properties["lockouttime"].Value = 0;
}
}
}
}
catch (Exception ex)
{
Log.Error("Password Can't Change:" + ex.InnerException.Message);
}
}
- 1. Verifica password rispetto a criteri Active Directory
- 2. Android - Come cambiare la modalità Timepicker a livello di programmazione?
- 3. Android view layout_width - come cambiare a livello di programmazione?
- 4. Come posso rendere UIImageView cambiare l'immagine a livello di programmazione?
- 5. Come cambiare card_view: cardCornerRadius a livello di programmazione
- 6. Come cambiare il timeout dello schermo a livello di programmazione?
- 7. Perché Active Directory convalida l'ultima password?
- 8. Come modificare la password utente di Drupal a livello di programmazione?
- 9. Come cambiare livello di registrazione di radice di programmazione
- 10. Creazione utente di Active Directory con password in C#
- 11. , verificare a livello di programmazione
- 12. Posso cambiare l'icona dell'app a livello di programmazione
- 13. Come cambiare il carattere di un'etichetta al livello di programmazione?
- 14. Come cambiare la dimensione del carattere della barra degli indirizzi in Chrome a livello di programmazione
- 15. Datatables JQuery. Come posso cambiare la pagina corrente a livello di programmazione?
- 16. iPhone: come possiamo cambiare la luminosità dello schermo a livello di programmazione?
- 17. iOS: Come cambiare la lingua delle app a livello di programmazione SENZA riavviare l'app?
- 18. Come cambiare a casa come risorsa up a livello di programmazione?
- 19. Cambiare la directory di lavoro in C?
- 20. Modifica lingua app a livello di programmazione
- 21. Determina programmatore di dominio corrente a livello di programmazione
- 22. Come falsificare Active Directory?
- 23. come inviare sms a livello di programmazione?
- 24. GradientDrawable change angle a livello di programmazione
- 25. Come disabilitare SparkUI a livello di programmazione?
- 26. Active Directory riconosce la transazione?
- 27. Ionico come tornare a livello di programmazione
- 28. Active Directory (LDAP) - Controllare conto bloccato/password scaduta
- 29. Modifica log4net livello di registrazione a livello di programmazione
- 30. Come nascondere UITabBarController a livello di programmazione?
Ecco disponibile solo in .NET 3.5 e versioni successive, BTW (PrincipalContext e tutti). –
Ricordarsi di 'user.Save()' in seguito. –