繰り返しの事務的な仕事を解決するために、簡単なC#winフォームアプリをまとめています。
ADですべてのユーザーアカウントの検索を実行し、それらをチェックボックス付きのリストビューに追加しています。
アカウントの有効/無効状態に依存するように、listviewitemsのデフォルトのチェック状態をデフォルトにしたいと思います。
string path = "LDAP://dc=example,dc=local";
DirectoryEntry directoryRoot = new DirectoryEntry(path);
DirectorySearcher searcher = new DirectorySearcher(directoryRoot,
"(&(objectClass=User)(objectCategory=Person))");
SearchResultCollection results = searcher.FindAll();
foreach (SearchResult result in results)
{
DirectoryEntry de = result.GetDirectoryEntry();
ListViewItem lvi = new ListViewItem(
(string)de.Properties["SAMAccountName"][0]);
// lvi.Checked = (bool) de.Properties["AccountEnabled"]
lvwUsers.Items.Add(lvi);
}
DirectoryEntryオブジェクトからアカウントの状態を取得するために、解析する適切な属性を見つけるのに苦労しています。 AD User attributes を検索しましたが、有用なものは見つかりませんでした。
誰でもポインターを提供できますか?
ここのこのコードは動作するはずです...
private bool IsActive(DirectoryEntry de)
{
if (de.NativeGuid == null) return false;
int flags = (int)de.Properties["userAccountControl"].Value;
return !Convert.ToBoolean(flags & 0x0002);
}
System.DirectoryServices.AccountManagementの使用:domainNameとusernameは、ドメインとユーザー名の文字列値である必要があります。
using (var domainContext = new PrincipalContext(ContextType.Domain, domainName))
{
using (var foundUser = UserPrincipal.FindByIdentity(domainContext, IdentityType.SamAccountName, username))
{
if (foundUser.Enabled.HasValue)
{
return (bool)foundUser.Enabled;
}
else
{
return true; //or false depending what result you want in the case of Enabled being NULL
}
}
}
誰も尋ねなかったわけではありませんが、ここにJavaバージョンがあります(私はここで1つを探したので)。ヌルチェックは読者の課題として残されています。
private Boolean isActive(SearchResult searchResult) {
Attribute userAccountControlAttr = searchResult.getAttributes().get("UserAccountControl");
Integer userAccountControlInt = new Integer((String) userAccoutControlAttr.get());
Boolean disabled = BooleanUtils.toBooleanObject(userAccountControlInt & 0x0002);
return !disabled;
}