如何通过 .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 工具交互就可以了。

  1. 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();
  1. 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 的硬件信息?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过asp.net核心中的属性名称从模型中获取验证属性

netcore如何获取ad帐号

如何在 Linux 上转储 .NET Core 应用程序

如何在 Linux 中为强命名程序集创建 .NETCore 的 snk

如何从 UWP(又名 .NET Core)中的 Type 对象获取程序集

如何在 Linux 上的 .NET 6 中抛出异常的 StackTrace 中获取行号