SIN@SAPPOROWORKSの覚書

C#を中心に、夜な夜な試行錯誤したコードの記録です。

DNSサーバの取得 (C#)(F#)


WMIによって管理されている情報からDNSサーバの設定を取得できます。

WMIクラスの使用例
※ManagementClass による取得
var mc = new ManagementClass("Win32_Service");
foreach (var m in mc.GetInstances())
 Console.WriteLine(m["Name"]);

※ManagementObjectSearcherによる検索
var query = new ManagementObjectSearcher("SELECT * FROM Win32_Service WHERE State='Running'");
foreach (var o in query.Get())
 Console.WriteLine(o["Name"]);

WMIクラスを使用する場合、System.Managementを参照設定で追加する必要があります

C#サンプル

using System;
using System.Management;

namespace Exsample {
    class Program {
        static void Main(string[] args) {
            var query = "SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = 'TRUE'";
            var ms = new ManagementObjectSearcher(query);
            foreach(var mo in ms.Get()) {
                var sl = (string[])mo["DNSServerSearchOrder"];
                if (sl != null) {
                    foreach (var sv in sl) {
                        Console.WriteLine(sv);
                    }
                }
            }
            Console.WriteLine();
            Console.WriteLine("何かのキーを押してください。");
            Console.ReadKey();
        }
    }
}

F#サンプル

open System
open System.Management

let query = "SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = 'TRUE'"
let ms = new ManagementObjectSearcher(query)
for mo in ms.Get() do
    let sl = mo.["DNSServerSearchOrder"] :?> string []
    if sl <> null then
        for sv in sl do
            printfn "%s" sv

printfn "何かのキーを押してください。"
Console.ReadKey() |> ignore

2011.11.02追記
@jsakamoto氏によるF#サンプルコード