2010-06-08 10 views
6

In altre parole, come cambiare la password senza passare attraverso il "Ctrl +Alt +Del -> Cambia password " interfaccia.Come posso modificare a livello di codice la password del mio dominio Windows?

Da programmaticamente intendo tramite uno strumento da riga di comando, C# tramite una libreria .NET, invocazione COM tramite Python, ... Qualunque cosa non implichi alcuna procedura manuale, in realtà.

Il comando NET USER non è idoneo, in quanto richiede l'esecuzione di privilegi di amministratore di dominio.

risposta

6
+0

Esattamente anche il mio caso d'uso. :) Grazie! – Deestan

+0

Il codice in quell'articolo sembra che potrebbe rispondere alla domanda, ma non sono d'accordo con l'articolo attuale poiché non menziona che funzionerebbe solo su un sistema gestito male dove * Minimum Password Age * non è stato impostato. –

+1

@ ho1 Grazie. Ho modificato l'articolo per includere una nota sull'età minima della password. – Sjoerd

3

Ecco una versione modificata del codice Sjoerd a condizione che cambia la password una volta, piuttosto che in bicicletta attraverso più modifiche di password.

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."); 
     } 
    } 
} 
Problemi correlati