Как я могу программно изменить пароль моего домена Windows? - PullRequest
7 голосов
/ 08 июня 2010

Другими словами, как сменить пароль без " Ctrl + Alt + Del -> Изменить пароль "interface.

Под программным способом я подразумеваю с помощью инструмента командной строки, C # через библиотеку .NET, COM-вызов через Python, ... Что бы не включало никаких ручных шагов, на самом деле.

Команда NET USER недопустима, так как требует, чтобы я работал с правами администратора домена.

Ответы [ 2 ]

7 голосов
/ 08 июня 2010

Используйте класс DirectoryEntry , чтобы получить и обновить запись активного каталога для пользователя.

http://linuxonly.nl/docs/21/43_Circumvent_password_expiry_in_Windows.html

4 голосов
/ 16 декабря 2010

Вот модифицированная версия кода Sjoerd при условии, что пароль изменяется один раз, а не циклически повторяется при смене нескольких паролей.

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.");
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...