パスワードがすぐに期限切れになるActive Directoryからユーザーのリストを取得する必要があります(5日以内など)。アクティブディレクトリ - パスワードの期限が切れているユーザーのリストをすぐに取得する
これを行うには、DirectorySearcher
にフィルタを追加する必要があります。 samaccountname
パターンをフィルタに追加しましたが、pwdLastSet
を追加する方法を理解できません。理想的には、フィルターはパスワードの有効期限を満たすユーザーにのみユーザーリストを縮小します。
using (DirectoryEntry searchRoot = GetXYZAccountOU())
{
DirectorySearcher ds = new DirectorySearcher(searchRoot);
ds.SearchScope = SearchScope.Subtree;
ds.Filter = "(&" +
"(samaccountname=XYZ*)"
+ ")";
SearchResultCollection result = ds.FindAll();
foreach (SearchResult searchResult in result)
{
var de = searchResult.GetDirectoryEntry();
//long pwdLastSetVal = (long)de.Properties["pwdLastSet"][0];
//Console.WriteLine(de.Properties["displayName"].Value + ": " + DateTime.FromFileTimeUtc(pwdLastSetVal));
Console.WriteLine(de.Properties["displayName"].Value);
}
Console.Read();
}
ここで、XYZはユーザーのsamaccountname
の頭文字です。
私はこのコードを実行した場合、私は、Active Directoryのブラウザでそれらの両方を見ることができますが、私はdisplayName
といくつかの他の属性ではなくpwdLastSet
または計算属性msDS-UserPasswordExpiryTimeComputed
を得ることができます。
あなたはPrincipalContextは、たとえばhttps://stackoverflow.com/questions/5535829/principalcontext-userprincipal-how-to-know-when-のためにここを見て使用してこれをやったほうが良いでしょうpassword-expires – MethodMan
私は、UserPrincipalを使って1人のユーザーのパスワードの有効期限を知ることができたと知っていましたが、数日でパスワードの有効期限が切れているユーザーのリストを探す必要があります。すべてのユーザーのリストを取得し、各ユーザーの有効期限を見つけるために繰り返し実行すると、パフォーマンスの観点から非常に悪いことになります。 – Danish
これを行うこともできますが、現在どのように単一のユーザーに対してこれを行っていますか?よく同じことをしますが、forループまたはforeachループの内部で行います。あなたはボックスの側面を考える必要があります – MethodMan