2013-10-23 104 views
1

寻找一些建议,如果有人知道我是否想要做甚至可能。让我先解释一下这个场景。从远程服务器获取多个IP - ASP.NET MVC3

主要的WebServer

  • 的Windows Server 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+
  • 第一块网卡都有一个物理IP地址的服务器
  • 第二个NIC有10个虚拟IP地址每个在IIS管理器中的网站

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

+0

为什么要这样做? –

+0

公平的问题。我的团队管理着大量的IIS WebServers,我们正在建立一个网站来管理我们的库存,而不是使用Excel。我们希望在每个网络服务器上存储每个可用IP地址的自动化方式,因此我们知道可以为其部署多少个其他网站。 – Mlynch1985

+1

您*可能*能够使用WMI远程查询服务器的IP地址。 –

回答

2

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

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

另请注意,此代码假定当前用户在远程服务器上有足够的访问权限。这是将其作为计划任务的另一个原因。您可以以管理员身份运行任务以收集数据,然后常规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); 
        } 
       } 
      } 
     } 
    } 
} 
+0

感谢大卫,这正是我一直在寻找的!一旦我对结果做了些什么,就像一个魅力一样工作。 – Mlynch1985

相关问题