C # ActiveDirectory - Как удаленно добавить учетную запись локального пользователя с компьютера, присоединенного к домену, на компьютер, не входящий в домен - PullRequest
0 голосов
/ 15 декабря 2010

Я пытаюсь добавить учетную запись локального пользователя на компьютере, не входящем в домен.Я перепробовал почти все, что мог придумать.У меня это работает на машинах в том же домене, но не на машинах вне домена.Я могу пропинговать TS на этом сервере, но не могу добавить администратора.

Возможно ли использовать DirectoryEntry для этого?

Вот код, который у меня есть (немного изменендля читабельности):

    private string AddLocalAdmin_NonDomain(string ComputerName)
    {
        StartImpersonation(); //Uses advapi32.dll->LogonUser()
        string ErrMsg = "";
        const int ADS_UF_DONT_EXPIRE_PASSWD = 0x10000;
        DirectoryEntry AD = new DirectoryEntry("WinNT://" + ComputerName + ",computer", ComputerName + "\\" + UserCredentials.Username, UserCredentials.Password);
        object n = AD.NativeObject;
        DirectoryEntry NewUser = AD.Children.Add(Username, "user");
        NewUser.Invoke("SetPassword", new object[] { Password });
        if (!PasswordExpires)
        {
            int val = ADS_UF_DONT_EXPIRE_PASSWD;
            NewUser.InvokeSet("userFlags", new object[] { val });
        }
        NewUser.CommitChanges();
        DirectoryEntry grp;
        grp = AD.Children.Find("Administrators", "group");
        if (grp != null) { grp.Invoke("Add", new object[] { NewUser.Path.ToString() }); }
        EndImpersonation(); //Ends the impersonation
        return ErrMsg; //returns "Access Denied"
    }

1 Ответ

2 голосов
/ 17 декабря 2010

Вы можете использовать

System.DirectoryServices.AccountManagement

и для достижения этого вот код

PrincipalContext oPrincipalContext = new PrincipalContext(ContextType.Machine);

//Create New User
UserPrincipal oUserPrincipal = new UserPrincipal(oPrincipalContext, "Your UserName", "Your Password", true /*Enabled or not*/);

oUserPrincipal.UserPrincipalName = "Your UserName";
oUserPrincipal.GivenName = "Given Name";
oUserPrincipal.Surname = "Surname";
oUserPrincipal.Save();

//Add User to Group
GroupPrincipal oGroupPrincipal = GroupPrincipal.FindByIdentity(oPrincipalContext, "Your Group Name");
oGroupPrincipal.Members.Add(oUserPrincipal);
oGroupPrincipal.Save();

для полной реализации перейдите сюда http://anyrest.wordpress.com/2010/06/28/active-directory-c/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...