我會監視我的Windows 7客戶端上的智能HDD。如何閱讀HDD S.M.A.R.T.屬性?
我想在沒有使用任何vbs文件或現成的工具來看待WMI或PowerShell的情況下獲得硬盤智能屬性。
我會用ZABBIX監控服務器(使用zabbix-sender.exe
)來聚合這些數據。
我發現Linux或多或少的解決方案,但我會監視Windows 7機器硬盤。
有沒有人有想法?
我會監視我的Windows 7客戶端上的智能HDD。如何閱讀HDD S.M.A.R.T.屬性?
我想在沒有使用任何vbs文件或現成的工具來看待WMI或PowerShell的情況下獲得硬盤智能屬性。
我會用ZABBIX監控服務器(使用zabbix-sender.exe
)來聚合這些數據。
我發現Linux或多或少的解決方案,但我會監視Windows 7機器硬盤。
有沒有人有想法?
下面是一個PowerShell腳本,用於從smartctl(smartmontools)輸出中提取所有屬性數據。如果路徑不在%path%中,請調整路徑到smartctl。
它可以像這樣使用:
.\get-smart.ps1 -Drive hda -AttributeId 5,241 -Property Name,Raw -FriendlyOutput
或只是
.\get-smart.ps1 hda 5,241 Name,Raw -f
等等。如果你指定-FriendlyOutput它格式化數據表,否則,它給你的對象。 如果你在一個特定的值只是感興趣,請
.\get-smart.ps1 hda 241 Raw
注意某些性能,如門檻,不存在,如果是smartctl讀取不以管理員身份運行。
還沒有異常處理!你被警告了!
param(
[Parameter(Mandatory=$True)]
[string] $Drive,
[int[]] $AttributeId,
[string[]] $Property,
[switch] $FriendlyOutput)
# parses attribute table in smartctl output and builds an object
$smart = [string[]](smartctl -A $Drive)
[email protected]()
foreach ($s in $smart) {
if ($s -match '^\s*(\d+)\s+(\w+)\s+(\w+)\s+(\d+)\s+(\d+)\s+([\d-]+)\s+([\w-]+)\s+(\w+)\s+([\w-]+)\s+(\d+)') {
$o = new-object -Typename PSObject
add-member -in $o -m NoteProperty -name 'ID' -value ([int]$matches[1])
add-member -in $o -m NoteProperty -name 'Name' -value $matches[2]
add-member -in $o -m NoteProperty -name 'Flag' -value $matches[3]
add-member -in $o -m NoteProperty -name 'Value' -value ([int]$matches[4])
add-member -in $o -m NoteProperty -name 'Worst' -value ([int]$matches[5])
add-member -in $o -m NoteProperty -name 'Threshold' -value ([int]$matches[6])
add-member -in $o -m NoteProperty -name 'Type' -value $matches[7]
add-member -in $o -m NoteProperty -name 'Updated' -value $matches[8]
add-member -in $o -m NoteProperty -name 'WhenFailed' -value $matches[9]
add-member -in $o -m NoteProperty -name 'Raw' -value ([int64]$matches[10])
$attributes += $o
}
}
if ($AttributeId){
$attributes = $attributes | ? {$_.id -in $attributeid}
}
if ($Property){
if ($property.count -gt 1 -and $attributes.count -gt -0 -and $Property -notcontains 'id'){
# if more than one result and more than one attribute, add the ID to the output
$property = ,'id'+$Property
}
$attributes = $attributes | select $Property
}
if (@($attributes).count -eq 1 -and @($attributes.psobject.properties).count -eq 1){
# return single values directly instead of an object
$attributes.psobject.properties.value
} elseif ($FriendlyOutput){
$attributes | ft * -a
} else {
$attributes
}
很遺憾,它沒有提供足夠的信息。 我會得到基於ID的vaues。像 03 - spin_up_time 00 – GergA