come cambiare la password per l’account utente, con il codice c #?

come cambiare la password per l’account utente, con il codice c #?

Utilizzando la directory triggers:

// Connect to Active Directory and get the DirectoryEntry object. // Note, ADPath is an Active Directory path pointing to a user. You would have created this // path by calling a GetUser() function, which searches AD for the specified user // and returns its DirectoryEntry object or path. See http://www.primaryobjects.com/CMS/Article61.aspx DirectoryEntry oDE; oDE = new DirectoryEntry(ADPath, ADUser, ADPassword, AuthenticationTypes.Secure); try { // Change the password. oDE.Invoke("ChangePassword", new object[]{strOldPassword, strNewPassword}); } catch (Exception excep) { Debug.WriteLine("Error changing password. Reason: " + excep.Message); } 

Qui hai un esempio per cambiarlo nell’account utente locale:

http://msdn.microsoft.com/en-us/library/ms817839

Altre alternative potrebbero utilizzare l’interoperabilità e chiamare il codice non gestito: netapi32.dll

http://msdn.microsoft.com/en-us/library/aa370650(VS.85).aspx

Ecco un modo più semplice per farlo, tuttavia è necessario fare riferimento a System.DirectoryServices.AccountManagement da .Net 4.0

 namespace PasswordChanger { using System; using System.DirectoryServices.AccountManagement; class Program { static void Main(string[] args) { ChangePassword("domain", "user", "oldpassword", "newpassword"); } public static void ChangePassword(string domain, string userName, string oldPassword, string newPassword) { try { using (var context = new PrincipalContext(ContextType.Domain, domain)) using (var user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, userName)) { user.ChangePassword(oldPassword, newPassword); } } catch (Exception ex) { Console.WriteLine(ex); } } } } 
  DirectoryEntry AD = new DirectoryEntry("WinNT://" + Environment.MachineName + ",computer"); DirectoryEntry grp; grp = AD.Children.Find("test", "user"); if (grp != null) { grp.Invoke("SetPassword", new object[] { "test" }); } grp.CommitChanges(); MessageBox.Show("Account Change password Successfully"); 

“esegui l’amministratore per cambiare tutti gli utenti

Funziona sia per gli account AD che per quelli locali.

Se si desidera richiamare questa API tramite C #, è ansible utilizzare questa firma per importare API NetUserChangePassword sul codice C #:

 [DllImport("netapi32.dll", CharSet=CharSet.Unicode, CallingConvention=CallingConvention.StdCall,SetLastError=true )] static extern uint NetUserChangePassword ( [MarshalAs(UnmanagedType.LPWStr)] string domainname, [MarshalAs(UnmanagedType.LPWStr)] string username, [MarshalAs(UnmanagedType.LPWStr)] string oldpassword, [MarshalAs(UnmanagedType.LPWStr)] string newpassword);