2013-10-23 44 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

相關問題