Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Имена компьютеров в домене.


Автор: Kolovorot 15.7.2010, 11:24
Как можно получить имена всех компьютеров находящихся в домене(Если возможно подключенных и неподключеных в момент запроса)?(Код C#).

Автор: larinva 15.7.2010, 12:40
Можно так
Код

                SelectQuery query = new SelectQuery("Win32_ComputerSystem");
                ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);

                foreach (ManagementObject mo in searcher.Get())
                {
                    TreeNode tn = new TreeNode(mo["domain"] as string);
                    treeViewNetwork.Nodes.Add(tn);
                    GetNetwork(tn);
                }

Автор: Kolovorot 15.7.2010, 15:42
А можно посмотреть как работает метод GetNetwork smile 

Автор: mihryak 15.7.2010, 18:28
вот тебе сгенерённый метод
Код

                ManagementObjectSearcher searcher = 
                    new ManagementObjectSearcher("root\\directory\\LDAP", 
                    "SELECT * FROM ds_computer"); 

                foreach (ManagementObject queryObj in searcher.Get())
                {
                    Console.WriteLine("DS_name: {0}", queryObj["DS_name"]);
                }

и через AD то же самое
Код

            using (Domain domain = Domain.GetCurrentDomain())
            using (DirectoryEntry domainEntry = domain.GetDirectoryEntry())
            using (DirectorySearcher searcher = new DirectorySearcher(domainEntry, "objectClass=computer", new [] {"Name"}))
            using (SearchResultCollection resultCollection = searcher.FindAll())
            {
                foreach (SearchResult searchResult in resultCollection)
                {
                    Console.WriteLine(searchResult.Properties["Name"][0]);
                }
            }

а вообще, очень не круто создавать одинаковые темы в разных разделах, да ещё и с немного разными условиями
прибил бы ты одну из них

Автор: larinva 19.7.2010, 19:14
код GetNetwork
Код

public void GetNetwork(TreeNode node)
        {
            node.Nodes.Clear();

            ArrayList list = ServerEnumClass.GetServerList(ServerEnumClass.SV_101_TYPES.SV_TYPE_WORKSTATION);
            try
            {
                foreach (string name in list)
                {
                    IPAddress[] ipaddr = Dns.GetHostAddresses(name);
                    DirectoryEntry entryPC = new DirectoryEntry("WinNT:");
                    TreeNode dir = new TreeNode(name);
                    foreach (IPAddress s in ipaddr)
                    {
                        dir.Nodes.Add(new TreeNode(s.ToString()));
                        //node.Nodes.Add(dir);
                    }
                    treeViewNetwork.Nodes.Add(dir);
                }
            }
                catch (Exception)
                {
                }
        }


Автор: VirusUZ 20.7.2010, 09:13
Супер Утилит

Автор: mihryak 20.7.2010, 15:22
 smile 
чем дальше, тем больше мне кажется, что ты развлекаешься крайне специфичным образом
то StringReader всюду пихаешь, где он нафиг не нужен, теперь вот выкладываешь какую-то муть, выдающую процессы на указанной машине, вместо перечисления этих машин

Автор: Compositum 12.11.2015, 12:58
Цитата(mihryak @ 15.7.2010,  18:28)
вот тебе сгенерённый метод
Код

                ManagementObjectSearcher searcher = 
                    new ManagementObjectSearcher("root\\directory\\LDAP", 
                    "SELECT * FROM ds_computer"); 

                foreach (ManagementObject queryObj in searcher.Get())
                {
                    Console.WriteLine("DS_name: {0}", queryObj["DS_name"]);
                }

и через AD то же самое
Код

            using (Domain domain = Domain.GetCurrentDomain())
            using (DirectoryEntry domainEntry = domain.GetDirectoryEntry())
            using (DirectorySearcher searcher = new DirectorySearcher(domainEntry, "objectClass=computer", new [] {"Name"}))
            using (SearchResultCollection resultCollection = searcher.FindAll())
            {
                foreach (SearchResult searchResult in resultCollection)
                {
                    Console.WriteLine(searchResult.Properties["Name"][0]);
                }
            }

а вообще, очень не круто создавать одинаковые темы в разных разделах, да ещё и с немного разными условиями
прибил бы ты одну из них

Благодарю за информацию, оба способа у меня работают (правда второй существенно быстрее первого). А можно ли помимо имени компьютера дополнительно сразу извлекать такую информацию как его SID, а так же информацию о его текущем состоянии (включен или выключен)?

Спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)