如何通过 .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 交互,想获取什么信息就获取信息,学习了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
NetCore是一个开源的跨平台开发框架,它具有很强的灵活性和可扩展性。要获取硬件信息,可以通过使用.NetCore提供的相关类和方法来实现。 首先,需要引入System.Management命名空间,这个命名空间提供了访问WMI(Windows Management Instrumentation,Windows管理工具)的功能,可以使用WMI获取硬件信息。 接下来,可以通过创建一个ManagementObjectSearcher对象来执行WMI查询。使用ManagementObjectSearcher的构造函数指定查询的WQL语句,例如查询所有的CPU信息可以使用"SELECT * FROM Win32_Processor"。 然后,通过调用ManagementObjectSearcher的Get()方法来执行查询,并返回一个ManagementObjectCollection对象。可以遍历这个对象,获取每一个硬件信息。 例如,要获取CPU的信息,可以通过遍历ManagementObjectCollection来获取每一个Win32_Processor对象,并使用这个对象的属性来获取CPU的相关信息,如Manufacturer(制造商)、Name(名称)、NumberOfCores(核心数)等。 同样的方式,还可以获取其他硬件信息,包括内存、磁盘、网卡等等。可以通过查询不同的WMI类来获取不同的硬件信息。 最后,可以将获取到的硬件信息以合适的方式展示出来,例如通过控制台输出、保存到文件或者上传到服务器等。 总而言之,通过使用.NetCore提供的System.Management命名空间和相关类,我们可以方便地获取硬件信息。这样,我们就可以在.NetCore应用程序中准确地获取和利用硬件信息,以满足不同的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值