2

Active Directory からマシンを収集し、List<>.

コードは次のとおりです。

public static List<string> PCsAndAttributes(string PCName, string AttributeToRead)
{
        List<string> toReturn = new List<string>();
        try
        {
            string LdapPath = "LDAP://corp.company.com";
            DirectoryEntry computer = new DirectoryEntry(LdapPath);

            DirectorySearcher search = new DirectorySearcher(PCName);

            string searchAtt = "Name";

            search.Filter = "(" + searchAtt + "=" + PCName + ")";

            search.PropertiesToLoad.Add(AttributeToRead);

            SearchResultCollection results = search.FindAll();

            foreach (SearchResult result in results)
            {
                ResultPropertyCollection PCS = result.Properties;

                if (!(toReturn.Contains(Convert.ToString(PCS))))
                {
                   toReturn.Add(Convert.ToString(PCS[AttributeToRead][0]));
                }
            }

            return toReturn;
        }
        catch (Exception err)
        {
            toReturn.Add(err.Message);
            return toReturn;
        }
    }

何らかの理由で、これによりツリービューにすべてのコンピューターが 2 つ作成されます。エラーがこの段階にあることは 99% 確信していますが、重複を排除することはできません。

ツリービュー ノード コードは次のとおりです。

    private void UpdateLists()
    {
        List<string> AdFinds = ProfileCleaner.smallClasses.AdClasses.PCsAndAttributes(txtComputers.Text, "Name");
        lblCount.Text = "PC Count: " + AdFinds.Count();

        foreach (string PC in AdFinds)
        {
            string online = ProfileCleaner.smallClasses.PingIt.Pingit(PC);

            if (online == "Success")
            {
                TreeNode pNode = treePCs.Nodes.Add(PC);
                pNode.Checked = true;

                string OS = ProfileCleaner.smallClasses.OsVersion.GetOsVersion.OSVersion(PC);

                string SubPath = null;
                if (OS == "6")
                {
                    SubPath = @"\C$\Users\";
                }
                else
                {
                    SubPath = @"\C$\Documents and Settings\";
                }

                try
                {
                    string[] usrs = Directory.GetDirectories(@"\\" + PC + SubPath);
                    foreach (string usr in usrs)
                    {
                        List<string> noAdds = new List<string>();
                        noAdds.Add("admin"); noAdds.Add("Administrator");

                            string[] lName = usr.Split('\\');
                            string user = Convert.ToString(lName[lName.Length - 1]);

                        if (!(noAdds.Contains(user)))
                        {
                        pNode.Nodes.Add(usr);
                        }
                    }
                }
                catch (Exception folderErr)
                {
                }
            }
        }
    }

Active Directory からすべてのマシンを 2 つ取得している理由を誰か教えてもらえますか?

おそらく私の論理ですが、次のようなことを試みて、キャプチャして排除しようとしました:

if (!(myList.contains(NewMachine)) { } 

それらを停止していません。

4

2 に答える 2

2

Active Directory では、コンピューターはユーザーとコンピューターの両方です。検索文字列はsearch.Filter = "(&(" + searchAtt + "=" + PCName + ")(objectclass=computer))";

于 2013-06-19T20:43:59.707 に答える
0

重複を避けたい場合は、次のようにする必要があります。

if (!(toReturn.Contains(Convert.ToString(PCS[AttributeToRead][0]))))

ADが重複を返す理由を知りたいです。:)

于 2013-06-19T20:42:01.327 に答える