1


0

私は私達の広告のすべての部署を読み出して、部署が属する各会社のxmlファイルとしてそれを保存する小さなアプリケーションを作りました。 ただし、各会社の各部門のユーザーが所属するすべてのグループも追加する必要があります。

これは、私のコードが生成するxmlファイルの一部です。 各部署ノードに子としてグループを追加します。


これを生成して保存するためのコードを以下に示します。 欲しいものを手に入れることは可能ですか? 任意の助けがいただければ幸いです。

static void Main(string [] args){ArrayList会社= new ArrayList(); company = GetCompaniesFromAD(); for(int i = 0; i <companies.Count; i){GetCompanyAndDepAndCreateXML(companies [i] .ToString()); }}

public static ArrayList GetCompaniesFromAD(){文字列パス= "LDAP:// myserver / OU =ブルケール、OU = Felles、DC = bla、DC = bla、DC = bla";

DirectoryEntryエントリ=新しいDirectoryEntry(パス)。 ArrayList企業= new ArrayList(); string sFilter = String.Format( "(

using(DirectorySearcher dirsearcher = new DirectorySearcher(entry、sFilter、attribs)){foreach(SearchResult dirsearcher.FindAll()のsResult){StringBuilder companyNames = new StringBuilder();

if(sResult.Properties.Contains( "company")){foreach(sResult.Properties ["company"]内のオブジェクトo){companyNames.AppendFormat( "{0}"、o); companies.Add(o.ToString()); //会社の場合は終了

} // // foreachを終了します。


ArrayList companyNoDuplicates = new ArrayList(); companyNoDuplicates = RemoveDuplicates(会社); return companyNoDuplicates; }

public static void GetCompanyAndDepAndCreateXML(string companyName){string path = "LDAP:// myserver / OU = Brukere、OU = Felles、DC = bla、DC = bla、DC = bla";

DirectoryEntryエントリ=新しいDirectoryEntry(パス)。 ArrayList departments = new ArrayList(); string sFilter = String.Format( "(

using(DirectorySearcher dirsearcher = new DirectorySearcher(entry、sFilter、attribs)){foreach(SearchResult dirsearcher.FindAll()のsResult){StringBuilder departmentNames = new StringBuilder();

if(sResult.Properties.Contains( "department")){foreach(sResult.Properties ["department"]内のオブジェクトo){departmentNames.AppendFormat( "{0}"、o); departments.Add(o.ToString()); }} // //部門の場合は終了します。

ArrayList departmentNoDuplicates = new ArrayList(); departmentNoDuplicates = RemoveDuplicates(departments);

generateXmlDoc(departmentNoDuplicates、companyName); }

public static void generateXmlDoc(ArrayList departments、文字列companyName){XElement xml = new XElement( "departments"); for(int i = 0; i <departments.Count; i){XElementノード= new XElement( "department"、新しいXAttribute( "name"、departments [i] .ToString())、new XElement( "group"、 "")); xml.Add(node); xml.Save(companyName ".xml");

}

public static ArrayList RemoveDuplicates(ArrayList items){ArrayList noDuplicates = new ArrayList(); foreach(文字列strItem in items){if(!noDuplicates.Contains(strItem.Trim())){noDuplicates.Add(strItem.Trim()); noDuplicates.Sort();

noDuplicatesを返します。 }

2 Answer


2


System.DirectoryServices.AccountManagementを使用すると、タスクの実行がより直感的にわかるため、実装がはるかに簡単になります。


2


"SCMcDonnell"が言ったように、あなたが.NET 3.5以上を使っているなら、間違いなくS.DS.AccountManagement名前空間を使う。

http://msdn.microsoft.com/en-us/magazine/cc135979.aspx[MSDN]でこの新しい名前空間を説明する優れた記事を見つけてください -  Joe KaplanとEthan Wilanskyは、新しい機能とそれらの使い方を説明する素晴らしい仕事をしました。

マーク