如何通过 .NETCore 获取 Linux,Mac 的硬件信息?
Posted dotNET跨平台
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何通过 .NETCore 获取 Linux,Mac 的硬件信息?相关的知识,希望对你有一定的参考价值。
咨询区
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 交互,想获取什么信息就获取信息,学习了。
以上是关于如何通过 .NETCore 获取 Linux,Mac 的硬件信息?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Linux 中为强命名程序集创建 .NETCore 的 snk