【问题标题】:How do you find out the difference between workstations and servers on the network?您如何找出网络上的工作站和服务器之间的区别?
【发布时间】:2012-07-25 17:33:41
【问题描述】:

我知道如何使用 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;
        }
    }
}

【问题讨论】:

  • 服务器上是否启用了 RPC 并且您的应用程序可以访问?例如,您可以使用 RPC 查询远程机器的注册表。
  • “服务器”是指“运行 Windows 的服务器 SKU”,而不是任何特定类型的行为或安装的服务?
  • mellamokb 我会调查的。 @MNGwinn 是的,这就是我所指的。
  • 您在域中吗?您是否考虑过为此使用 Active Directory?
  • 我正在为此使用 Active Directory。我需要做的是按操作系统区分服务器和工作站。问题是没有操作系统属性。

标签: c# .net networking active-directory


【解决方案1】:

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

【讨论】:

  • 不管什么原因,没有操作系统属性(它可能在该域的机器上被阻止),但还是非常感谢您的帮助。
  • 我最终使用了 System.Management 命名空间中的 WMI 命令。解决了它:)。
【解决方案2】:

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

关键是:

  • 如果这台 PC 运行的是 Windows Server(例如 Windows Server 2012),则为“服务器”。
  • 如果此 PC 运行 Windows 桌面(例如 Windows 8.1),则为“客户端”。

使用任何语言(例如 C#)都可以轻松读取此注册表项。

有关详细信息,请参阅标题为“distinguish between server os and workstation”的文章。

更新

链接已失效,请使用 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(服务包 1,服务包 2,...)

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

我实际上并没有在我的情况下使用它,但如果您正在寻找更多 执行此类操作的预打包工具 DtWinVer,位于 http://www.codeproject.com/system/dtwinver.asp 看起来也很有希望。

【讨论】:

猜你喜欢
  • 2016-05-03
  • 2015-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-29
  • 1970-01-01
  • 1970-01-01
  • 2016-11-09
相关资源
最近更新 更多