import (
"fmt"
"strconv"
"github.com/StackExchange/wmi"
)
const (
Power_On_Hours = 9
Power_Cycle_Count = 12
Temperature_Celsius = 194
)
var smartProperties = map[uint8]string{
Power_On_Hours: "通电总时长",
Power_Cycle_Count: "通电次数",
}
// MSStorageDriver_ATAPISmartData 硬盘smart信息
type MSStorageDriver_ATAPISmartData struct {
Active bool
Checksum uint8
ErrorLogCapability uint8
//ExtendPollTimeInMinutes uint8
InstanceName string
Length uint32
OfflineCollectCapability uint8
OfflineCollectionStatus uint8
Reserved []uint8
SelfTestStatus uint8
//ShortPollTimeMinutes uint8
SmartCapability uint16
TotalTime uint16
VendorSpecific []uint8
VendorSpecific2 uint8
VendorSpecific3 uint8
VendorSpecific4 []uint8
}
func GetDiskSmartData() {
var sd []MSStorageDriver_ATAPISmartData
err := wmi.QueryNamespace("Select * from MSStorageDriver_ATAPISmartData", &sd, "root\\WMI")
if err != nil {
fmt.Println("err", err)
return
}
for _, v := range sd {
result := SplitUintN(v.VendorSpecific[2:], 12)
if result != nil {
data := parseSmartData(result)
fmt.Println("硬盘信息:",v.InstanceName)
fmt.Println(data)
}
}
}
// 解析smart消息
func parseSmartData(data [][]uint8) string {
var result string
for _, v := range data {
if len(v) != 12 {
continue
}
v5 := int(v[5])
v6 := int(v[6]) * 16 * 16
v7 := int(v[7]) * 16 * 16 * 16
p := v5 + v6 + v7
switch v[0] {
case Power_On_Hours:
result += smartProperties[Power_On_Hours] + ":" + strconv.Itoa(p) + "\n"
case Power_Cycle_Count:
result += smartProperties[Power_Cycle_Count] + ":" + strconv.Itoa(p) + "\n"
}
}
return result
}
// SplitUintN 按给定的长度进行分割
func SplitUintN(source []uint8, size int) [][]uint8 {
if len(source) < size || size <= 0 {
return nil
}
result := make([][]uint8, 0)
for i := 0; i < len(source)/size; i++ {
if source[i*size] == 0 {
continue
}
if len(source[i*size:]) > size {
result = append(result, source[i*size:i*size+size])
} else {
result = append(result, source[i*size:])
}
}
return result
}
Go-使用wmi获取硬盘smart信息并解析
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- QRcodeViewController *qrViewC = [[QRcodeViewController al...
- cheerio用于node环境,用法与语法都类似于jquery。jquery本身也可以用于node,在借助于第三方...
- OSHI介绍: OSHI是一个基于JNA的免费的本地操作系统和Java的硬件信息库。它不需要安装任何额外的本机库,...
- var href = window.location.href,str = href.substring(href...