2012-07-25 8 views
5

Wiem, jak uzyskać maszyny na serwerze przy użyciu sieci System.DirectoryServices. Problem polega na tym, że chciałbym zignorować stacje robocze/komputery w sieci i tylko pobierać serwery.Jak znaleźć różnicę między stacjami roboczymi a serwerami w sieci?

W przypadku, gdy ktoś powie, aby sprawdzić wersję systemu operacyjnego, problem z uzyskaniem numeru wersji systemu operacyjnego Windows NT dla rodziny NT jest taki, że każdy numer może odpowiadać zarówno serwerowi, jak i systemowi nieobsługującemu systemu operacyjnego (na przykład wersja 6.1 systemu Windows odnosząca się zarówno do systemu Win 7 i Win Server 2008 R2).

Oto moja podstawowa klasa Test:

namespace Project1 
{ 
    class Class1 
    { 
     public static void Main(string[] args) 
     { 
      List<string> list = Class1.GetComputersOnNetwork();   
     } 

     public static List<string> GetComputersOnNetwork() 
     { 
      string fileName = "networkcomputers.txt"; 

      // Delete the file if it exists. 
      if (System.IO.File.Exists(fileName)) 
      { 
       System.IO.File.Delete(fileName); 
      } 

      // Create the file. 
      System.IO.FileStream fs = System.IO.File.Create(fileName, 1024); 

      StreamWriter strwr = new StreamWriter(fs); 

      int i = 0; 
      List<string> list = new List<string>(); 
      DirectoryEntry root = new DirectoryEntry("WinNT:");   
      foreach (DirectoryEntry computers in root.Children) 
      {     
       if ((computers.Name != "Schema")) 
       { 
        i++; 
        Console.WriteLine("Machine Number " + i + ": " + computers.Name); 
        strwr.WriteLine("Machine Number " + i + ": " + computers.Name); 
        list.Add(computers.Name); 
       }   
      } 
      return list; 
     } 
    } 
} 
+0

Czy usługa RPC jest włączona na serwerach i dostępna dla aplikacji? Na przykład możesz zapytać o rejestr zdalnej maszyny za pomocą RPC. – mellamokb

+1

Przez "serwer" należy rozumieć "uruchomienie kodu SKU serwera", a nie określonego zachowania lub zainstalowanych usług? – MNGwinn

+0

mellamokb Zajrzę do tego. @MNGwinn Tak, właśnie to mam na myśli. – praetor

Odpowiedz

2

Zamiast iść na miejscu operatingSystemVersion, spojrzeć na własność operatingSystem. To da ci nazwę SKU. Musisz wiedzieć, które wersje systemu operacyjnego są serwerami, a które nie - boolean IsServer. W zależności od tego, jak są one nazwane, możesz wykonać wyszukiwanie wieloznaczne na operatingSystemVersion, aby znaleźć komputery, które mają operatingSystemVersion, który zawiera ciąg "serwer".

+0

Z jakiegoś powodu nie istnieje właściwość systemu operacyjnego (prawdopodobnie jest zablokowana na komputerach w tej domenie), ale i tak bardzo dziękuję za pomoc. – praetor

+0

Skończyło się na użyciu poleceń WMI z przestrzeni nazw System.Management. Że się tym zajął :). – praetor

1

Możesz przeczytać klucz rejestru HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\InstallationType.

Kluczem jest:

  • "Serwer", jeśli ten komputer jest uruchomiony system Windows Server (na przykład Windows Server 2012).
  • "Klient", jeśli na tym komputerze jest uruchomiony pulpit systemu Windows (np. Windows 8.1).

Ten klucz rejestru jest dość łatwy do odczytania przy użyciu dowolnego języka, takiego jak C#. Aby uzyskać więcej informacji, zobacz artykuł zatytułowany "distinguish between server os and workstation".

Powiązane problemy