74

反復的な事務作業を解決するために、簡単な 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を検索しましたが、有用なものは見つかりませんでした。

誰でもポインタを提供できますか?

4

5 に答える 5

12

誰かが尋ねたわけではありませんが、ここに Java バージョンがあります (ここで探してしまったので)。Null チェックは、読者の演習として残されています。

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;
}
于 2013-12-10T20:55:25.713 に答える
-1

答えを求めてここに来ましたが、それは のためだけでしたDirectoryEntry。したがって、同じ問題を抱えている人のために、 SearchResult/で機能するコードを次に示します。SearchResultCollection

private bool checkIfActive(SearchResult sr)
{
    var vaPropertiy = sr.Properties["userAccountControl"];

    if (vaPropertiy.Count > 0) 
    {
        if (vaPropertiy[0].ToString() == "512" || vaPropertiy[0].ToString() == "66048") 
        {
            return true;
        } 
        
        return false;
    }

    return false;
}
于 2020-08-28T12:55:35.127 に答える