2013-10-16 26 views
0

我有以下一段代码,其中我试图检查一个组是否已经存在于活动目录中。如果不存在,则继续&创建组。但是我的小组检查功能工作不正常。检查是组已存在于Active Directory中

您能否提出一些建议。

下面是检查组是否已经存在的代码部分。

using (var domainContext = new PrincipalContext(ContextType.Domain, "xyz")) 
{ 
    var foundGrp = GroupPrincipal.FindByIdentity(domainContext, IdentityType.SamAccountName, obj); 
    bool UserExists = (foundGrp != null); 

    if (!UserExists) 
    { 
     //DirectoryEntry group = entry.Children.Add("CN=" + obj, "group"); 
     group.CommitChanges(); 

     Console.WriteLine("AD Group " + obj + " has been created"); 
     Console.WriteLine("====================================="); 
    } 
} 

这是我的整个代码。我只是尝试了几个功能。从长远来看,我会将我的代码模块化为不同的功能。谢谢。

 static void Main(string[] args) 
     { 
      try 
      { 
       /*Read the input XML File*/ 
       XmlDocument xml = new XmlDocument(); 
       xml.Load(@"xyz.xml"); 
       var exportNode = xml.SelectSingleNode("//Export"); 

       for (int i = 0; i < exportNode.ChildNodes.Count; i++) 
       { 
        /*Node 1 reads block 1 of the XML*/ 
        XmlNode dataNode = exportNode.ChildNodes[i]; 

        var environmentNode = dataNode.SelectSingleNode("env"); 
        var tech_domainNode = dataNode.SelectSingleNode("Tech"); 

        string env = environmentNode.InnerText; 
        string tech_domain = tech_domainNode.InnerText; 

        var output_valueNode = dataNode.SelectSingleNode("Output_Value"); 
        string obj = output_valueNode.InnerText; 
        Console.WriteLine("obj is " + obj); 

        if (tech_domain == "AD Group") 
        { 
         string path = "LDAP://OU=Security,OU=Groups,DC=xyz"; 
         using (DirectoryEntry entry = new DirectoryEntry(path)) 
         { 
          DirectoryEntry group = entry.Children.Add("CN=" + obj, "group"); 
          group.Properties["sAmAccountName"].Value = obj; 

          using (var domainContext = new PrincipalContext(ContextType.Domain, "xyz")) 
          { 
           var foundGrp = GroupPrincipal.FindByIdentity(domainContext, IdentityType.SamAccountName, obj); 
           bool UserExists = (foundGrp != null); 

           if (!UserExists) 
           { 
            //DirectoryEntry group = entry.Children.Add("CN=" + obj, "group"); 
            group.CommitChanges(); 

            Console.WriteLine("AD Group " + obj + " has been created"); 
            Console.WriteLine("====================================="); 
           } 
          } 
         } 
        } 
        else 
        { 
         Console.WriteLine("Technology Domain for " + obj + " is not an AD Group"); 
         Console.WriteLine("===================================================="); 
        } 
       } 
       Console.ReadLine(); 
      } 
      catch (Exception e) 
      { 
       Console.WriteLine(e.Message.ToString()); 
       Console.WriteLine("==============================="); 
      } 
     } 
    } 
} 
+0

你的小组检查功能工作正常。我复制粘贴确切的代码到我的机器上,只更改RJFDEV域,并将'obj'设置为特定字符串:代码按预期工作。 – Kittoes0124

回答

0

我想你会以非常圆润的方式回合。请查看Everything in Active Directory via C#.NET。有三个系列的帖子描述了使用.NET System.DirectoryServices.AccountManagement命名空间来管理AD并对任何给定的主体执行CRUD操作。

相关问题