DyadyaGenya
Знающий
- Сообщения
- 309
- Репутация
- 10
Почему-то увеличиваются (прибавляются предыдущие) результаты выполнения функции.
Если делаю так, то результаты получаются не увеличенными, тоесть выдаются подряд.
Но если подставляю в функцию получения смарта, то вместо того, чтобы показывать смарт-инфу по очереди по каждому винту, показывает сперва по первому, затем в одном массиве первый и второй, затем первый, второй, третий. Думаю и дальше так суммировало бы. Делаю так:
Что не так делаю и как это убрать?
Если делаю так, то результаты получаются не увеличенными, тоесть выдаются подряд.
Код:
#include<Array.au3>
Const $wbemFlagReturnImmediately = 0x10
Const $wbemFlagForwardOnly = 0x20
Global $strVendorSpecific[0], $strVendorSpecificA[0], $vendor[3]
$objWMIService = ObjGet("winmgmts:\\" & @ComputerName & "\root\WMI")
$colItems = $objWMIService.ExecQuery("SELECT * FROM MSStorageDriver_ATAPISmartData", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
For $diskVendor In $colItems
_ArrayAdd($diskVendors, $diskVendor.InstanceName &'|'&StringReplace($diskVendor.InstanceName, '\','\\'))
Next
;_ArrayDisplay($diskVendors, 'массив вендоров')
For $zzz=0 To UBound($diskVendors)-1
_Smart($diskVendors[$zzz][1])
Next
Func _Smart($zzz)
ConsoleWrite($zzz & @CR)
EndFunc
Но если подставляю в функцию получения смарта, то вместо того, чтобы показывать смарт-инфу по очереди по каждому винту, показывает сперва по первому, затем в одном массиве первый и второй, затем первый, второй, третий. Думаю и дальше так суммировало бы. Делаю так:
Код:
#include <Constants.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUITab.au3>
#include <GUIListView.au3>
#include <GUIImageList.au3>
#include <String.au3>
#include <Array.au3>
#include <Math.au3>
Global $sSMARTCodeTxt = "1*1*Raw Read Error Rate*Частота ошибок при чтении данных с диска;" & _
"2*2*Throughput Performance*Общая производительность диска.;" & _
"3*3*Spin-Up Time*Время раскрутки пакета дисков из состояния покоя до рабочей скорости.;" & _
"4*4*Start/Stop Count*Полное число циклов запуск-остановка шпинделя. В поле raw value хранится общее количество запусков/остановок диска;" & _
"5*5*Reallocated Sectors Count*Число операций переназначения секторов.;" & _
"6*6*Read Channel Margin*Запас канала чтения. Назначение этого атрибута не документировано. В современных накопителях не используется.;" & _
"7*7*Seek Error Rate*Частота ошибок при позиционировании блока магнитных головок.;" & _
"8*8*Seek Time Performance*Средняя производительность операции позиционирования магнитными головками.;" & _
"9*9*Power-on Time Count (Power-On Hours)*Число часов (POH)(минут секунд — в зависимости от производителя) проведённых во включенном состоянии.;" & _
"10*0A*Spin-Up Retry Count*Число повторных попыток раскрутки дисков до рабочей скорости в случае если первая попытка была неудачной"
Const $wbemFlagReturnImmediately = 0x10
Const $wbemFlagForwardOnly = 0x20
Global $Index[0], $Smart[0][10]
Global $strVendorSpecific[0], $strVendorSpecificA[0], $k[0], $diskVendors[0][2]
Global $STR1[0][4]
$TTT = _StringExplode($sSMARTCodeTxt, ";")
ConsoleWrite('TTT ' & UBound($TTT) & @CR)
For $s = 0 To UBound($TTT)-1
_ArrayAdd($STR1, $TTT[$s], 0, "*")
Next
$objWMIService = ObjGet("winmgmts:\\" & @ComputerName & "\root\WMI")
$colItems = $objWMIService.ExecQuery("SELECT * FROM MSStorageDriver_ATAPISmartData", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
For $diskVendor In $colItems
_ArrayAdd($diskVendors, $diskVendor.InstanceName &'|'&StringReplace($diskVendor.InstanceName, '\','\\'))
Next
;_ArrayDisplay($diskVendors, 'массив вендоров')
ConsoleWrite('STR1 ' & UBound($STR1) & @CR)
For $zzz=0 To UBound($diskVendors)-1
_Smart($diskVendors[$zzz][1])
Next
Func _Smart($zzz)
$objWMIService = ObjGet("winmgmts:\\" & @ComputerName & "\root\WMI")
$colItems = $objWMIService.ExecQuery('SELECT * FROM MSStorageDriver_ATAPISmartData Where InstanceName="' & $zzz &'"', "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
For $Item In $colItems
$strVendorSpecific = $Item.VendorSpecific
_ArrayDisplay($strVendorSpecific,"Спецификация")
Next
For $z = 2 to UBound($strVendorSpecific) - 1 Step 12
_ArrayAdd($k, $strVendorSpecific[$z])
Next
For $j = 0 To UBound($STR1)-1
For $i = 2 to UBound($strVendorSpecific) - 1 Step 12
Select
Case $strVendorSpecific[$i] = $STR1[$j][0]
$sPark = $strVendorSpecific[$i]& '|' & $STR1[$j][2] & '|' & '1' & '|' & $strVendorSpecific[$i + 1] & '|' & $strVendorSpecific[$i + 2] & '|' & $strVendorSpecific[$i + 3] & '|' & $strVendorSpecific[$i + 4] & '|' & $strVendorSpecific[$i + 5] & '|' & $strVendorSpecific[$i + 6]
If StringStripWS($sPark, 8) <> 0 Then _ArrayAdd($Smart, $sPark)
Case Else
$sPark=''
EndSelect
Next
Next
_ArrayDisplay($Smart, 'Smart', Default, '', Default, "ID|Attribute|Type|Flag|Threshold(Порог)|Текущее|Worst(Наихудший)|Значение||Status")
EndFunc
Последнее редактирование: