1

アドバイスを探して、私がやりたいことが可能かどうか知っている人がいたら. 最初にシナリオを説明します。

メイン Web サーバー:

  • Windows Server 2008 R2
  • IIS7.5
  • .NET 4.0 フレームワーク
  • ASP.NET MVC3 アプリケーション

サーバー クラスター (x10 サーバー) :

  • Windows Server 2003/Windows Server 2008 R2
  • IIS 6/IIS 7.5
  • .NET 2.0+ フレームワーク
  • 最初の NIC には、サーバー用の 1 つの物理 IP アドレスがあります
  • 2 番目の NIC には、IIS マネージャーの Web サイト用にそれぞれ 10 個の仮想 IP アドレスがあります。

私がやろうとしているのは、メイン Web サーバーで実行されている MVC3 Web サイトを使用してサーバー クラスターに接続し、各サーバーの仮想 IP アドレスのリストを返し、それを MS SQL データベースに保存することです。これは可能で、.NET Web サイトから実行できますか? 各サーバーにはpowershell 1+が搭載されているため、powershellスクリプトを作成してみることができると思います。

4

1 に答える 1

2

以下は、WMI を使用して、サーバー上のすべての NIC に割り当てられているすべての IP を見つけるコードです。Win32_NetworkAdapterConfigurationこの表で使用可能なその他のフィールドは、こちらで検索できます。

これは Web ページからライブで実行するには十分な速度ではない可能性があることに注意してください。私は似たような作業をしていますが、スケジュールされたタスクが1日に1回、すべてのサーバーと通信しています。次に、Web ページはデータベースから情報を読み取るだけです。

また、このコードは、現在のユーザーがリモート サーバーに十分なアクセス権を持っていることを前提としていることにも注意してください。これは、スケジュールされたタスクにするもう 1 つの理由です。管理者としてタスクを実行してデータを収集すると、通常の 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 に答える