0

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

你能不能给一些建议。

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

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("===============================");
            }
        }
    }
}
4

1 回答 1

0

我认为你正在以一种非常迂回的方式来解决这个问题。请通过 C#.NET 查看Active Directory 中的 Everything。共有三个系列的文章描述了使用 .NET System.DirectoryServices.AccountManagement 命名空间来管理 AD 并在任何给定主体上执行 CRUD 操作。

于 2013-10-16T20:43:43.177 回答