如何使用.Net Core识别Linux / Mac计算机的硬件详细信息

时间:2018-11-28 05:02:50

标签: c# .net .net-core hardware

如何使用.Net Core识别Linux / Mac计算机的硬件详细信息。

对于Windows计算机,我们可以使用System.Management和WMI查询。

因此,可以使用任何类似的方法来识别Linux和Mac计算机的硬件细节(例如RAM,处理器,监视器,CAM等)。

对于Windows,我正在使用:

ManagementObjectSearcher searcher = 
    new ManagementObjectSearcher("select * from Win32_Processor");

2 个答案:

答案 0 :(得分:1)

我已经完成了一种变通方法,可以根据平台获取硬件信息。对于Windows,我使用了旧的系统管理类,对于Linux,我使用了不同的Bash命令来获取处理器ID,型号,模型版本,机器ID。 以下是我正在使用的一些Linux命令

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"

很快就会在.net核心框架中寻求支持

我的gihub帖子地址为https://github.com/dotnet/corefx/issues/22660

我还使用了类似的扩展方法,并对bash命令进行了一些优化的代码

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;
        }

答案 1 :(得分:0)

这是一段代码,用于在.net核心中编写bash linux命令:

using System;
using System.Diagnostics;
    public static class ShellHelper
    {
        public static string Bash(this string cmd)
        {
            var escapedArgs = cmd.Replace("\"", "\\\"");

            var process = new Process()
            {
                StartInfo = new ProcessStartInfo
                {
                    FileName = "/bin/bash",
                    Arguments = $"-c \"{escapedArgs}\"",
                    RedirectStandardOutput = true,
                    UseShellExecute = false,
                    CreateNoWindow = true,
                }
            };
            process.Start();
            string result = process.StandardOutput.ReadToEnd();
            process.WaitForExit();
            return result;
        }
    }

这是一种扩展方法,您可以像这样使用它:

var output = "ps aux".Bash();

关于推荐,请参考VITUX上的Get Linux System and Hardware Details on the Command Line文章以帮助您编写推荐,其中列出了大多数收集Linux上系统信息的推荐。


对于MAC

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());
         }
     }