Установка даты LastPasswordSet для пользователя в Active Directory - PullRequest
1 голос
/ 25 мая 2010

Я хочу установить атрибут LastPasswordSet пользователя в Microsoft Active Directory.

.NET UserPrincipal API предоставляет свойство LastPasswordSet только для чтения.

Есть ли способ обойти это, чтобы установить значение (возможно, используя ADSI)?

Edit:

MSDN предоставляет следующий пример кода:

usr.Properties["pwdLastSet"].Value = -1; // To turn on, set this value to 0.
usr.CommitChanges();

Это заставляет пользователя менять свой пароль при следующем входе в систему. Я предполагаю, что если я заменю -1 на дату-время в соответствующем формате, это будет делать то, что я хочу.

Это, однако, не показывает, как я овладеваю принципалом (предположительно usr). Я опишу все, что поможет мне это выяснить.

Ответы [ 2 ]

1 голос
/ 25 мая 2010

Другим способом было бы выполнить поиск по AD через класс DirectorySearcher, используя логин ваших пользователей.

public DirectoryEntry GetUser(string domain, string loginName) {
    DirectorySearcher ds = new DirectorySearcher();
    ds.SearchRoot = new DirectoryEntry(domain);
    ds.SearchScope = SearchScope.Subtree;
    ds.PropertiesToLoad.Add("sAMAccountName");
    ds.PropertiesToLoad.Add("pwdLastSet");
    ds.Filter = string.Format("(&(objectCategory=person)(objectClass=user)(sAMAccountName={0})", loginName);

    SearchResult sr = null;

    try {
        sr = ds.FindOne();
        if (sr == null) return null;
        return sr.GetDirectoryEntry();
    } catch (Exception) {
        throw;
    }
}

Затем, когда вы хотите установить свойство PasswordLastSet, вы гарантируете, что пользователь существует и что нет орфографических ошибок.

string loginName = "AstonB1";

using(DirectoryEntry user = GetUser(loginName)) {
    if (user == null) return;

    user.Properties["pwdLastSet"].Value = whatever-format-the-date-should-be;
    user.CommitChanges();
    user.Close();
}
0 голосов
/ 25 мая 2010

Как то так?

var usr = new DirectoryEntry("LDAP://CN=Old User,CN=users,DC=fabrikam,DC=com");
usr.Properties["pwdLastSet"].Value = whatever-format-the-date-should-be;
usr.CommitChanges();

Пока не проверено.

...