程序通过命令行获取操作系统名称+版本+CPU名称等:Part2

文章目录

  • (一)沿用的方法
  • (二)问题和调整
    • (2.1)Windows11的版本号是10.0
    • (2.2)Golang和管道符号(Linux)
    • (2.3)最大内存容量 vs 当前安装内存容量 (Win)

(一)沿用的方法

参考:《程序通过命令行获取操作系统名称+版本+CPU名称等各种信息》

(二)问题和调整

(2.1)Windows11的版本号是10.0

这是微软自己搞出来的问题。
大版本号一样,只能通过后面的小版本号build来判断是11还是10。
所以如果用cmd或者ver来取版本号。
Win11目前是这样的:

C:\>cmd /C ver
Microsoft Windows [Version 10.0.22621.2361]

Win10则是这样的(请问有啥区别):

C:\>cmd /C ver
Microsoft Windows [Version 10.0.19045.3448]

为了清晰的看出是Win11,还是Win10,只好不用ver,而是通过wmic。
可以比较清晰的看出Windows各个版本。

C:\>wmic os get caption,version
Caption                           Version
Microsoft Windows 11 Pro / 专业版  10.0.22621

(2.2)Golang和管道符号(Linux)

还记得之前写的Golang调用命令行比其它语言麻烦一点,需要把命令和参数分开传递。
有管道符的命令就不灵了,比如:

> cat /proc/cpuinfo | grep 'model name' | uniq | cut -d':' -f 2

上面这样句怎么调用都不会有结果。
需要在前面田间bash -c,具体执行的语句变成了:

exec.Command("bash", "-c", "cat /proc/cpuinfo | grep 'model name' | uniq | cut -d':' -f 2")

(2.3)最大内存容量 vs 当前安装内存容量 (Win)

不知道哪里抄的wmic.exe memphysical get maxcapacity
简单测了一下似乎是正常的(单位KB)。

C:\> wmic memphysical get maxcapacity
MaxCapacity
33554432

换台电脑发现数字不对……这才知道,这个数字,是电脑能够安装的最大内存容量,并不是当前安装的内存容量。
得换成(单位Byte):

C:\> wmic ComputerSystem get TotalPhysicalMemory
TotalPhysicalMemory
34182582272

或者(单位KB):

C:\> wmic os get TotalVisibleMemorySize
TotalVisibleMemorySize
33381428

不过并不是整数的32GB,和任务管理器里面看到的一致为31.8GB

你可能感兴趣的:(Linux,Windows,General,Coding,命令行,Windows,Linux,CPU,RAM)