1

LastPasswordSetMicrosoftActiveDirectoryでユーザーの属性を設定したい。

.NET UserPrincipalAPIは、LastPasswordSetプロパティを読み取り専用として公開します。

これを回避する方法はありますか(おそらくADSIを使用して)値を設定しますか?

編集:

MSDNは、次のサンプルコードを提供しています。

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

これにより、ユーザーは次回のログオン時にパスワードを変更する必要があります。-1を関連する形式の日時に置き換えると、これで希望どおりの結果が得られると思います。

ただし、プリンシパルを取得する方法は示されていません(おそらくusr)。私はこれを見つけるのに役立つものなら何でも賛成します。

4

2 に答える 2

1

もう1つの方法はDirectorySearcher、ユーザーのログインを使用して、クラスを介してADに対して検索を実行することです。

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();
}
于 2010-05-25T15:18:27.550 に答える
0

このようなもの?

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();

まだテストされていません。

于 2010-05-25T14:50:31.897 に答える