これには DirectoryEntry を使用した回答が多数ありますが、AccountManagement クラスに関連するものはありません。
AccountManagement を使用して OU のリストを取得する方法はありますか?
これには DirectoryEntry を使用した回答が多数ありますが、AccountManagement クラスに関連するものはありません。
AccountManagement を使用して OU のリストを取得する方法はありますか?
個人的には、「DirectoryEntry」がおそらく正しい方法だと思います。
ただし、このリンクでは、PrincipalContext を使用できることが示唆されています。
古い質問ですが、それでも解決しなければならなかったので、見つけたものを共有します: プリンシパル オブジェクトを任意の ActiveDirectory オブジェクトに拡張できます (docs.microsoft.com でプリンシパル拡張を検索してください) 例:
[DirectoryRdnPrefix("OU")]
[DirectoryObjectClass("organizationalUnit")]
public class OuPrincipal : GroupPrincipal
{
public OuPrincipal(PrincipalContext pc) : base(pc)
{
}
OuPrincipalSearchFilter searchFilter;
public OuPrincipalSearchFilter AdvancedSearchFilter
{
get
{
if ( null == searchFilter )
searchFilter = new OuPrincipalSearchFilter(this);
return searchFilter;
}
}
public object[] GetAttribute(string attribute)
{
return (ExtensionGet(attribute));
}
[DirectoryProperty("st")]
public string State
{
get
{
if (ExtensionGet("st").Length != 1)
return null;
return (string)ExtensionGet("st")[0];
}
}
「State」プロパティに何かを含む Ous のリストが必要だったので、advancedFilterSet を拡張する必要がありました
public class OuPrincipalSearchFilter : AdvancedFilters
{
public OuPrincipalSearchFilter(Principal p) : base(p){}
public void testState(string value)
{
this.AdvancedFilterSet("st", value, typeof(string), MatchType.Equals);
}
}
その後 :
var test = new OuPrincipal(pc);
test.AdvancedSearchFilter.testState("*");
PrincipalSearcher ps = new PrincipalSearcher(test);
var rslts = ps.FindAll();
foreach(OuPrincipal ou in rslts)
{
Console.WriteLine("OU "+ou.Name+" : "+ou.State+" ("+ou.Description+")");
}
それが誰か(または次回忘れたときに私自身...)に役立つことを願っています. この github リポジトリをインスピレーションに使用しました。