Auslesen aller SMART-Infos via WMI

  • Moin,

    gleich vorweg. Die Suche wurde benutzt, jedoch nicht das Passende gefunden.

    Ich suche einen Anstoß, wie ich die SMART-Infos der Festplatte auslesen kann. Ich weiß, dass es via WMI möglich ist und dass das Objekt MSStorageDriver_ATAPISmartData heißt. Jedoch bin ich wohl zu doof das Ganze in die richtige Form zu bringen.

    Danke für eure Tips schon mal im voraus.

  • ScriptoMatic sagt:

    Spoiler anzeigen
    [autoit]


    ; Generated by AutoIt Scriptomatic

    [/autoit] [autoit][/autoit] [autoit]

    $wbemFlagReturnImmediately = 0x10
    $wbemFlagForwardOnly = 0x20
    $colItems = ""
    $strComputer = "localhost"

    [/autoit] [autoit][/autoit] [autoit]

    $Output=""
    $Output = $Output & "Computer: " & $strComputer & @CRLF
    $Output = $Output & "==========================================" & @CRLF
    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\WMI")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM MSStorageDriver_ATAPISmartData", "WQL", _
    $wbemFlagReturnImmediately + $wbemFlagForwardOnly)

    [/autoit] [autoit][/autoit] [autoit]

    If IsObj($colItems) then
    For $objItem In $colItems
    $Output = $Output & "Checksum: " & $objItem.Checksum & @CRLF
    $Output = $Output & "ErrorLogCapability: " & $objItem.ErrorLogCapability & @CRLF
    $Output = $Output & "ExtendedPollTimeInMinutes: " & $objItem.ExtendedPollTimeInMinutes & @CRLF
    $Output = $Output & "Length: " & $objItem.Length & @CRLF
    $Output = $Output & "OfflineCollectCapability: " & $objItem.OfflineCollectCapability & @CRLF
    $Output = $Output & "OfflineCollectionStatus: " & $objItem.OfflineCollectionStatus & @CRLF
    $Output = $Output & "SelfTestStatus: " & $objItem.SelfTestStatus & @CRLF
    $Output = $Output & "ShortPollTimeInMinutes: " & $objItem.ShortPollTimeInMinutes & @CRLF
    $Output = $Output & "SmartCapability: " & $objItem.SmartCapability & @CRLF
    $Output = $Output & "TotalTime: " & $objItem.TotalTime & @CRLF
    $strVendorSpecific = $objItem.VendorSpecific(0)
    $Output = $Output & "VendorSpecific: " & $strVendorSpecific & @CRLF
    $Output = $Output & "VendorSpecific2: " & $objItem.VendorSpecific2 & @CRLF
    $Output = $Output & "VendorSpecific3: " & $objItem.VendorSpecific3 & @CRLF
    $strVendorSpecific4 = $objItem.VendorSpecific4(0)
    $Output = $Output & "VendorSpecific4: " & $strVendorSpecific4 & @CRLF
    if Msgbox(1,"WMI Output",$Output) = 2 then ExitLoop
    $Output=""
    Next
    Else
    Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "MSStorageDriver_ATAPISmartData" )
    Endif

    [/autoit]

    Aber ungetestet..

  • Scriptomatic ist in dem Fall leider unvollständig. Hier das ganze mal entsprechnenden ergänzt:

    Spoiler anzeigen
    [autoit]

    ; Generated by AutoIt Scriptomatic

    [/autoit] [autoit][/autoit] [autoit]

    $wbemFlagReturnImmediately = 0x10
    $wbemFlagForwardOnly = 0x20
    $colItems = ""
    $strComputer = "localhost"

    [/autoit] [autoit][/autoit] [autoit]

    $Output = ""
    $Output = $Output & "Computer: " & $strComputer & @CRLF
    $Output = $Output & "==========================================" & @CRLF
    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\WMI")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM MSStorageDriver_ATAPISmartData", "WQL", _
    $wbemFlagReturnImmediately + $wbemFlagForwardOnly)

    [/autoit] [autoit][/autoit] [autoit]

    If IsObj($colItems) Then
    For $objItem In $colItems
    $Output = $Output & "Active: " & $objItem.Active & @CRLF
    $Output = $Output & "Checksum: " & $objItem.Checksum & @CRLF
    $Output = $Output & "ErrorLogCapability: " & $objItem.ErrorLogCapability & @CRLF
    $Output = $Output & "ExtendedPollTimeInMinutes: " & $objItem.ExtendedPollTimeInMinutes & @CRLF
    $Output = $Output & "InstanceName: " & $objItem.InstanceName & @CRLF
    $Output = $Output & "Length: " & $objItem.Length & @CRLF
    $Output = $Output & "OfflineCollectCapability: " & $objItem.OfflineCollectCapability & @CRLF
    $Output = $Output & "OfflineCollectionStatus: " & $objItem.OfflineCollectionStatus & @CRLF
    $strReserved = $objItem.Reserved(0)
    $Output = $Output & "Reserved: " & $strReserved & @CRLF
    $Output = $Output & "SelfTestStatus: " & $objItem.SelfTestStatus & @CRLF
    $Output = $Output & "ShortPollTimeInMinutes: " & $objItem.ShortPollTimeInMinutes & @CRLF
    $Output = $Output & "SmartCapability: " & $objItem.SmartCapability & @CRLF
    $Output = $Output & "TotalTime: " & $objItem.TotalTime & @CRLF
    $strVendorSpecific = $objItem.VendorSpecific(0)
    $Output = $Output & "VendorSpecific: " & $strVendorSpecific & @CRLF
    $Output = $Output & "VendorSpecific2: " & $objItem.VendorSpecific2 & @CRLF
    $Output = $Output & "VendorSpecific3: " & $objItem.VendorSpecific3 & @CRLF
    $strVendorSpecific4 = $objItem.VendorSpecific4(0)
    $Output = $Output & "VendorSpecific4: " & $strVendorSpecific4 & @CRLF

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    If MsgBox(1, "WMI Output", $Output) = 2 Then ExitLoop
    $Output = ""
    Next
    Else
    MsgBox(0, "WMI Output", "No WMI Objects Found for class: " & "Win32_AccountSID")
    EndIf

    [/autoit]

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.