Как обновить данные в Active Directory с помощью DirectoryEntry? - PullRequest
0 голосов
/ 25 марта 2019

Я хочу обновить дату истечения срока действия пользователя в Active Directory. Если у вас уже есть пользователь, то срок действия обновления истекает. Я пытаюсь позвонить CommitChanges с этим кодом:

if (result == null)
{
    DirectoryEntry newUser = dirEntry.Children.Add("CN=" + fNm, "user");
    newUser.Properties["sAMAccountName"].Value = uNm;
    newUser.Properties["givenName"].Value = fNm;
    newUser.Properties["sn"].Value = lNm;
    newUser.Properties["displayName"].Value = NID_Number;

    dateEng = DateTime.Today.AddDays(3); ;

    newUser.Properties["accountExpires"].Value = dateEng.ToFileTime().ToString();

    newUser.Properties["userPrincipalName"].Add(uNm + "@pkru.ac.th");
    newUser.CommitChanges();
    oGUID = newUser.Guid.ToString();

    const int UF_NORMAL_ACCOUNT = 0x0200;
    const int UF_DONT_EXPIRE_PASSWD = 0x10000;
    newUser.Properties["userAccountControl"].Value = UF_NORMAL_ACCOUNT + UF_DONT_EXPIRE_PASSWD;
    newUser.Invoke("SetPassword", new object[] { NID_Number });

    newUser.CommitChanges();

    dirEntry.Close();
    newUser.Close();
}
else
{
    gp = SearchUserGroup(result);

    if (string.Equals(gp, "ABC"))
    {
        dateEng = DateTime.Today.AddDays(7); ;
        DirectoryEntry newUser = dirEntry.Children.Add("CN=" + fNm, "user");
        newUser.Properties["accountExpires"].Clear();
        newUser.Properties["accountExpires"].Value = dateEng.ToFileTime().ToString();
        newUser.CommitChanges();
    }
}

Когда я запускаю, выдает ошибку вроде этого.

в System.DirectoryServices.DirectoryEntry.CommitChanges ()
в NIDCardCS.Form1.AddToAD (строка fNm, строка lNm, строка uNm, строка) в C: \ Users \ Test \ Form1.cs: строка 289
Исключение: «System.DirectoryServices.DirectoryServicesCOMException» в System.DirectoryServices.dll
System.DirectoryServices.DirectoryServicesCOMException (0x80071392): объект уже существует.

Как обновить данные в Active Directory с помощью DirectoryEntry?

1 Ответ

0 голосов
/ 03 июня 2019

Если вы не знаете путь к пользователю, используйте DirectorySearcher, чтобы найти пользователя. Если вы знаете путь, создайте новый экземпляр, используя. например.,

using (var entry = new DirectoryEntry("LDAP://CN=first last,OU=blah,DC=blah"))
{
    entry.Properties["accountExpires"].Value = blah
    entry.CommitChanges()
}

Обычно вам не нужно Clear значение до его установки.

Всегда используйте using, если можете, так как это сокращает вероятность того, что вы забудете позвонить Close.

...