在 Windows 2016 Server 上使用 wmi 和 python 获取 ATAPISmartData

问题描述

我想通过 wmi 和 python 读取我的 SSD 驱动器的 S.M.A.R.T 供应商特定数据,以找出驱动器的开机时间。

以下代码片段在 Windows10IoT 和 WindowsEmbedded7 中运行良好:

import wmi
print(wmi.WMI(namespace=r'root\wmi').MsstorageDriver_ATAPISmartData()[0].vendorSpecific)

但是在 Windows Server 2016 上 wmi MsstorageDriver_ATAPISmartData() 失败了:

Traceback (most recent call last):
  File "C:\Users\Engineering\AppData\Local\Programs\Python\python37\lib\site-packages\wmi.py",line 880,in query
    return self._namespace.query(wql,self,fields)
  File "C:\Users\Engineering\AppData\Local\Programs\Python\python37\lib\site-packages\wmi.py",line 1072,in query
    return [ _wmi_object(obj,instance_of,fields) for obj in self._raw_query(wql) ]
  File "C:\Users\Engineering\AppData\Local\Programs\Python\python37\lib\site-packages\wmi.py",in <listcomp>
    return [ _wmi_object(obj,fields) for obj in self._raw_query(wql) ]
  File "C:\Users\Engineering\AppData\Local\Programs\Python\python37\lib\site-packages\win32com\client\dynamic.py",line 236,in __getitem__
    return self._get_good_object_(self._enum_.__getitem__(index))
  File "C:\Users\Engineering\AppData\Local\Programs\Python\python37\lib\site-packages\win32com\client\util.py",line 37,in __getitem__
    return self.__GetIndex(index)
  File "C:\Users\Engineering\AppData\Local\Programs\Python\python37\lib\site-packages\win32com\client\util.py",line 53,in __GetIndex
    result = self._oleobj_.Next(1)
pywintypes.com_error: (-2147217396,'OLE error 0x8004100c',None,None)

During handling of the above exception,another exception occurred:

Traceback (most recent call last):
  File ".\vendorSpecific.py",line 2,in <module>
    print(wmi.WMI(namespace=r'root\wmi').MsstorageDriver_ATAPISmartData()[0].vendorSpecific)
  File "C:\Users\Engineering\AppData\Local\Programs\Python\python37\lib\site-packages\wmi.py",line 882,in query
    handle_com_error()
  File "C:\Users\Engineering\AppData\Local\Programs\Python\python37\lib\site-packages\wmi.py",line 258,in handle_com_error
    raise klass(com_error=err)
wmi.x_wmi: <x_wmi: Unexpected COM Error (-2147217396,None)>

我也用 cimv2 命名空间尝试过,但这也失败了。

知道如何在 Windows 2016 Server Edition 中使用 wmi 读取 vendorSpecific Data 吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)