2010-06-08 8 views
6

En otras palabras, la forma de cambiar mi contraseña sin pasar por el "Ctrl +Alt +Del -> Cambiar contraseña " interfaz.¿Cómo puedo cambiar de forma programática mi contraseña de dominio de Windows?

Por programación quiero decir a través de una herramienta de línea de comandos, C# a través de una biblioteca .NET, invocación COM vía Python, ... Lo que no implica ningún paso manual, realmente.

El comando NET USER no es elegible, ya que requiere que se ejecute con privilegios de administrador de dominio.

Respuesta

6
+0

Exactamente mi caso de uso también. :) ¡Gracias! – Deestan

+0

Parece que el código de ese artículo podría responder la pregunta, pero no estoy de acuerdo con el artículo en sí, ya que no menciona que solo funcionaría en un sistema mal administrado donde * Edad mínima de contraseña * no se ha establecido. –

+1

@ ho1 Gracias. Cambié el artículo para incluir una nota sobre la edad mínima de la contraseña. – Sjoerd

3

Aquí es una versión modificada del Sjoerd código, siempre que cambia la contraseña una vez más que el ciclismo a través de múltiples cambios de contraseña.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.DirectoryServices; 

namespace ChangePassword 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string Domain = Environment.UserDomainName; 
      string User = Environment.UserName; 

      if (args.Length < 2) 
      { 
       System.Console.WriteLine("Usage: ChangePassword OldPassword NewPassword [User]"); 
       System.Console.WriteLine("  -The domain is " + Domain + "."); 
       System.Console.WriteLine("  -The user is " + User + " unless it is specified."); 
       System.Environment.Exit(1); 
      } 
      string OldPassword = args[0]; 
      string NewPassword = args[1]; 
      if (args.Length == 3) 
       User = args[2]; 

      DirectoryEntry entry = null; 
      try { 
       entry = new DirectoryEntry(@"WinNT://" + Domain + "/" + User + ",User"); 
      } 
      catch (System.Reflection.TargetInvocationException e) 
      { 
       System.Console.WriteLine("Domain/User failed due to:"); 
       Exception cause = e.InnerException; 
       System.Console.WriteLine(cause.Message); 
       System.Environment.Exit(1); 
      } 

      try { 
       entry.Invoke("ChangePassword", OldPassword, NewPassword); 
      } 
      catch (System.Reflection.TargetInvocationException e) 
      { 
       System.Console.WriteLine("Password change failed due to:"); 
       Exception cause = e.InnerException; 
       System.Console.WriteLine(cause.Message); 
       System.Environment.Exit(1); 
      } 
      System.Console.WriteLine("Ok."); 
     } 
    } 
} 
Cuestiones relacionadas