如何使用.Net Core识别Linux / Mac计算机的硬件详细信息。
对于Windows计算机,我们可以使用System.Management
和WMI查询。
因此,可以使用任何类似的方法来识别Linux和Mac计算机的硬件细节(例如RAM,处理器,监视器,CAM等)。
对于Windows,我正在使用:
ManagementObjectSearcher searcher =
new ManagementObjectSearcher("select * from Win32_Processor");
答案 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());
}
}