咨询区
Pascal Jackson:
请问我如何通过 .NET Core 去识别 Linux/Mac
电脑上的硬件信息?在 windows 上我可以通过 System.Management
下 WMI Query 很容易获取,比如下面的代码:
ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from Win32_Processor");
回答区
Barr J:
其实很简单,你可以用 .net core
与它们的 shell 工具交互就可以了。
Linux 机器
可以先看看如果用 bash 命令获取 Process Id
, Machine id, version
等等,比如下面这些。
1. "LinuxModel": "cat /sys/class/dmi/id/product_name"
2. "LinuxModelVersion": "cat /sys/class/dmi/id/product_version"
3. "LinuxProcessorId": "dmidecode -t processor | grep -E ID | sed 's/.*: //' | head -n 1"
4. "LinuxFirmwareVersion": "cat /sys/class/dmi/id/bios_version",
5. "LinuxMachineId": "cat /var/lib/dbus/machine-id"
接下来写一个 扩展方法
来搞定。
public static string Bash(this string cmd){string result = String.Empty;try{var escapedArgs = cmd.Replace("\"", "\\\"");using (Process process = new Process()){process.StartInfo = new ProcessStartInfo{FileName = "/bin/bash",Arguments = $"-c \"{escapedArgs}\"",RedirectStandardOutput = true,UseShellExecute = false,CreateNoWindow = true,};process.Start();result = process.StandardOutput.ReadToEnd();process.WaitForExit(1500);process.Kill();};}catch (Exception ex){//Logger.ErrorFormat(ex.Message, ex);}return result;}
然后你就可以这样使用。
var output = "ps aux".Bash();
Mac 机器
你可以借助 ManagementClass
类去获取,参考如下代码:
public static void Main(string[] args){System.Management.ManagementClass mc = default(System.Management.ManagementClass);ManagementObject mo = default(ManagementObject);mc = new ManagementClass("Win32_NetworkAdapterConfiguration");ManagementObjectCollection moc = mc.GetInstances();foreach (var mo in moc){if (mo.Item("IPEnabled") == true){Adapter.Items.Add("MAC " + mo.Item("MacAddress").ToString());}}}
点评区
确实是一个好办法,在 Linux 上可以和 bash 交互,在 Windows 上也可以同 cmd,powershell 交互,想获取什么信息就获取信息,学习了。