您如何找出网络上工作站和服务器之间的区别?

时间:2012-07-25 17:33:41

标签: c# .net networking active-directory

我知道如何使用System.DirectoryServices网络在服务器上获取计算机。 问题是我想忽略网络上的工作站/计算机,只检索服务器。

如果有人说检查操作系统版本,获取Win NT系列操作系统版本号的问题是每个数字可能对应于服务器和非服务器操作系统(例如NT版本6.1同时指向Win 7和Win Server 2008 R2)。

这是我的基础测试课程:

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;
        }
    }
}

2 个答案:

答案 0 :(得分:3)

不要进入operatingSystemVersion属性,而是查看operatingSystem属性。那将为您提供SKU的名称。您需要知道哪些是服务器操作系统版本,哪些不是 - 没有IsServer布尔值。根据它们的命名方式,您可以在operatingSystemVersion上进行通配符搜索,以查找包含字符串“server”的operatingSystemVersion的计算机。

答案 1 :(得分:2)

您可以阅读注册表项HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\InstallationType

关键是:

  • &#34;服务器&#34;如果此PC运行Windows Server(例如Windows Server 2012)。
  • &#34;客户&#34;如果此PC运行的是Windows桌面(例如Windows 8.1)。

使用C#等语言很容易阅读此注册表项。

有关详细信息,请参阅标题为&#34; distinguish between server os and workstation&#34;。

的文章

<强> 更新

链接已死,请使用archive.org: https://web.archive.org/web/20140502101009/http://blogs.msdn.com/b/ejarvi/archive/2004/06/08/151162.aspx

从此页面复制:

  

ejarvi 2004年6月8日下午3:47 9我在测试工具中维护一个脚本   自动检测并报告该机器的操作系统版本   测试。我无法判断我是在运行XP SP1还是XP SP2 - 所以我有一个   使用reskit中的spcheck的kludge。但真正的问题是   我从cmd shell使用ver获得了大部分信息但是在   Windows 2000无法区分Professional和   服务器。我能够在注册表中找到所有这些信息,所以我撕开了   出了黑客,现在我只是从那里读书。如果有人出去了   试图做同样的事情,在这里,我得到了   来自(全部在HKLM)的信息:

     

SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProductName(Microsoft   Windows Server 2003,Microsoft Windows XP,Microsoft Windows 2000)

     

SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ CDSVersion(Service Pack   1,Service Pack 2,...)

     

在Windows 2000上区分Pro和Server:   SYSTEM \ CurrentControlSet \ Control \ ProductOptions \ ProductType(WinNT,   ServerNT)

     

我没有在我的情况下实际使用它,但如果你正在寻找更多   一个预先打包的工具来做这类事情,DtWinVer at   http://www.codeproject.com/system/dtwinver.asp看起来很有希望。