1

寻找一些建议,如果有人知道我想做的事情是否可能。让我先解释一下这个场景。

主网络服务器

  • 视窗服务器 2008 R2
  • IIS 7.5
  • .NET 4.0 框架
  • ASP.NET MVC3 应用程序

服务器集群(x10 服务器)

  • Windows Server 2003/Windows Server 2008 R2
  • IIS 6/IIS 7.5
  • .NET 2.0+ 框架
  • 第一个 NIC 有一个服务器的物理 IP 地址
  • 第二个 NIC 有 10 个虚拟 IP 地址,每个虚拟 IP 地址用于 IIS 管理器中的一个网站

我要做的是使用在 Main WebServer 上运行的 MVC3 网站连接到服务器集群并返回每台服务器上的虚拟 IP 地址列表,然后将其存储在 MS SQL 数据库中。这可能吗?可以通过 .NET 网站完成吗?我相信我可以尝试编写一个 powershell 脚本,因为每个服务器上都有 powershell 1+。

4

1 回答 1

2

下面是一些使用 WMI 查找分配给服务器上所有 NIC 的所有 IP 的代码。您可以在此处Win32_NetworkAdapterConfiguration查找表中可用的其他字段。

请注意,这可能不够快,无法从网页实时运行。我有类似的工作,但我有一个计划任务每​​天与我的所有服务器通话一次。然后网页只是从数据库中读取信息。

另请注意,此代码假定当前用户在远程服务器上有足够的访问权限。这是使其成为计划任务的另一个原因。您可以以管理员身份运行任务来收集数据,然后普通 IIS 用户可以从数据库中读取数据。否则,您将不得不更改运行 IIS 的用户以赋予它足够的权限。

// You'll need to reference "System.Management" for this to work...
var server = "your server name";
var scope = new System.Management.ManagementScope(@"\\" + server + @"\root\cimv2");
scope.Connect();

using (var searcher = new System.Management.ManagementObjectSearcher(scope,
        new System.Management.ObjectQuery(
            "Select Caption, IPAddress FROM Win32_NetworkAdapterConfiguration")))
{

    using (var children = searcher.Get())
    {
        if (children.Count > 0)
        {
            foreach (var item in searcher.Get())
            {
                var nicName = item["Caption"];
                var ips = item["IPAddress"] as string[];

                if (ips != null)
                {
                    Console.WriteLine(nicName);
                    foreach (var ip in ips)
                    {
                        Console.WriteLine("   " + ip);
                    }
                }
            }
        }
    }
}
于 2013-10-23T21:08:26.307 回答