たまたまプロダクトID を取得するにはどうしたらいいのか話題になったため、息抜きに書いてみました。
OS に限らず、様々な管理情報を取得するクラスとして、「ManagementObjectSearcher」クラスが利用できます。
OS に関する情報を取得するには、ManagementObjectSearcher クラスのコンストラクタに引数として “SELECT * FROM Win32_OperatingSystem” を入力することで様々な情報を取得できます。
プロダクトID はクエリによって取得されるプロパティのうち、PropertyData.Name が 「SerialNumber」のデータとなるので、Where で特定して取得しています。
メソッド構文による例(下
var productId = new ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem").Get() .OfType<ManagementObject>() .SelectMany((m) => m.Properties.OfType<PropertyData>().Select((p) => new { p.Name, p.Value })) .Where((p) => p.Name == "SerialNumber") .Select((p) => (string)p.Value) .FirstOrDefault(); Console.WriteLine(productId ?? "情報を取得できませんでした。");
クエリ構文による例(下
var productId = (from ManagementObject m in new ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem").Get() from PropertyData p in m.Properties where p.Name == "SerialNumber" select (string)p.Value).FirstOrDefault(); Console.WriteLine(productId ?? "情報を取得できませんでした。");
また、ManagementObjectSearcher クラスのコンストラクタに渡すクエリを、”SELECT SerialNumber FROM Win32_OperatingSystem” とすると、Where を使わなくても簡単に特定させることもできます。
ManagementObjectSearcher クラスから取得するデータ型から特定の値を探し出すのは若干手間ですが、慣れれば様々な情報を簡単に取得することができます。
「Win32_OperatingSystem」以外にも様々な種類がありますので、調べてみると面白いかもしれません。
コメントを残す
コメントを投稿するにはログインしてください。