2012-07-25 34 views
5

Tôi biết cách lấy các máy trên máy chủ bằng mạng System.DirectoryServices. Vấn đề là tôi muốn bỏ qua máy trạm/máy tính trên mạng và chỉ truy xuất máy chủ.Làm thế nào để bạn tìm ra sự khác biệt giữa các máy trạm và máy chủ trên mạng?

Trong trường hợp ai đó nói để kiểm tra phiên bản hệ điều hành, sự cố với số phiên bản hệ điều hành Windows NT là mỗi số có thể tương ứng với cả máy chủ và hệ điều hành không phải máy chủ (chẳng hạn như phiên bản NT 6.1. 7 và Win Server 2008 R2).

Đây là lớp học của tôi cơ bản kiểm tra:

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

RPC có được bật trên máy chủ và có thể truy cập vào ứng dụng của bạn không? Ví dụ, bạn có thể truy vấn registry của máy từ xa bằng RPC. – mellamokb

+1

Bởi "máy chủ", bạn có nghĩa là "chạy một SKU máy chủ của Windows" và không phải bất kỳ loại hành vi hoặc dịch vụ được cài đặt cụ thể nào? – MNGwinn

+0

mellamokb Tôi sẽ xem xét điều đó. @MNGwinn Vâng, đó là những gì tôi đang đề cập đến. – praetor

Trả lời

2

Thay vì đi vào operatingSystemVersion sở hữu, hãy nhìn vào operatingSystem tài sản. Điều đó sẽ cung cấp cho bạn tên SKU. Bạn sẽ cần phải biết đó là phiên bản hệ điều hành máy chủ và không phải là - không có IsServer boolean. Tùy thuộc vào cách họ được đặt tên, bạn có thể thực hiện tìm kiếm theo ký tự đại diện trên operatingSystemVersion để tìm các máy tính có số operatingSystemVersion chứa chuỗi "máy chủ".

+0

Vì bất kỳ lý do gì, không có thuộc tính hệ điều hành (có thể bị chặn trên các máy trên miền này), nhưng cảm ơn rất nhiều vì sự trợ giúp. – praetor

+0

Tôi đã kết thúc bằng cách sử dụng lệnh WMI từ không gian tên System.Management. Điều đó đã chăm sóc nó :). – praetor

1

Bạn có thể đọc khóa đăng ký HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\InstallationType.

Điều quan trọng là:

  • "Máy chủ" nếu máy tính này đang chạy Windows Server (ví dụ: Windows Server 2012).
  • "Khách hàng" nếu PC này đang chạy Windows Desktop (ví dụ: Windows 8.1).

Khóa đăng ký này khá dễ đọc bằng bất kỳ ngôn ngữ nào như C#.

Để biết thêm thông tin, hãy xem bài viết có tiêu đề "distinguish between server os and workstation".

Các vấn đề liên quan