Я пытаюсь получить PCoIP статистики, которые доступны через WMI, я использую следующую команду для WMICWMI: Получение Ошибка Invalid класса при выполнении команды оболочки через другую программу
wmic path Win32_PerfRawData_TeradiciPerf_PCoIPSessionNetworkStatistics
или с помощью PowerShell
powershell Get-WmiObject -namespace "root\cimv2" -computername computer01 -class Win32_PerfRawData_TeradiciPerf_PCoIPSessionNetworkStatistics
Однако, когда я попытался запустить любую команду, разветвленную через другой процесс, в этом случае это был python, а piping stdout, я получаю ошибку Invalid class, как показано ниже.
Get-WmiObject : Invalid class
At line:1 char:14
+ Get-WmiObject <<< -namespace root\cimv2 -computername computer01 -class
Win32_PerfRawData_TeradiciPerf_PCoIPSessionNetworkStatistics
+ CategoryInfo : InvalidOperation: (:) [Get-WmiObject], ManagementException
+ FullyQualifiedErrorId : GetWMIManagementException,Microsoft.PowerShell.Commands.GetWmiObjectCommand
, если это поможет, то выход из Powershell команды через командную строку является
__GENUS : 2
__CLASS : Win32_PerfRawData_TeradiciPerf_PCoIPSessionNetworkS
tatistics
__SUPERCLASS : Win32_PerfRawData
__DYNASTY : CIM_StatisticalInformation
__RELPATH : Win32_PerfRawData_TeradiciPerf_PCoIPSessionNetworkS
tatistics.Name="PCoIP Session"
__PROPERTY_COUNT : 19
__DERIVATION : {Win32_PerfRawData, Win32_Perf, CIM_StatisticalInfo
rmation}
__SERVER : DEMO-VSGA-WS01
__NAMESPACE : rootcimv2
__PATH : \DEMO-VSGA-WS01rootcimv2:Win32_PerfRawData_Terad
iciPerf_PCoIPSessionNetworkStatistics.Name="PCoIP S
ession"
Caption :
Description :
Frequency_Object : 0
Frequency_PerfTime : 10000000
Frequency_Sys100NS : 10000000
Name : PCoIP Session
RoundTripLatencyms : 284
RXBWkbitPersec : 22034
RXBWPeakkbitPersec : 4
RXPacketLossPercent : 112
RXPacketLossPercent_Base : 28805
Timestamp_Object : 0
Timestamp_PerfTime : 299873128867
Timestamp_Sys100NS : 130641888164850000
TXBWActiveLimitkbitPersec : 1832
TXBWkbitPersec : 75615
TXBWLimitkbitPersec : 90000
TXPacketLossPercent : 7
TXPacketLossPercent_Base : 30942
Я также попытался с помощью модуля питона WMI
hostname = os.getenv('COMPUTERNAME', '')
c = wmi.WMI (hostname, namespace="root\\cimv2")
print c.Win32_PerfRawData_TeradiciPerf_PCoIPSessionNetworkStatistics
Я получаю следующее сообщение об ошибке
print c.Win32_PerfRawData_TeradiciPerf_PCoIPSessionNetworkStatistics
File "c:\users\ramesh~1\appdata\local\temp\easy_install-tlfipc\WMI-1.4.9-py2.7
-win32.egg.tmp\wmi.py", line 1147, in __getattr__
File "C:\Python27\lib\site-packages\win32com\client\dynamic.py", line 522, in
__getattr__
raise AttributeError("%s.%s" % (self._username_, attr))
AttributeError: winmgmts://computer01/root/cimv2.Win32_PerfRawData_TeradiciP
erf_PCoIPSessionNetworkStatistics
Can это связано с уровнем олицетворения и аутентификации вызывающего?
UPDATE
Я переместил команду Powershell в файл летучей мыши, когда я запускаю файл битой через CMD, он снова работает нормально.
Когда вы просматриваете python, он показывает ту же ошибку. Если это помогает, я использую код python.
p = subprocess.Popen ('bat.bat',stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
print p.stdout.read()
Я попробовал список классов в пространстве имен, класс был указан, когда файл летучей мыши вызывается через CMD, когда Popen, ни один из классов Teradici в не был доступны. Командная строка в bat.bat является
powershell Get-WmiObject -namespace "root\cimv2" -computername computer01 -list
Все это выполняется на VMWare VDI (Virtual Desktop Infrastructure), могут ли быть какие-либо ограничения политики?
Это, кажется, указывает на проблему синтаксического анализа: -namespace rootcimv2 – mjolinor
@mjolinor Я не знал о escape-символе, я изменил программу, но все же, Invalid class – user1064504
Любая вероятность того, что поставщик WMI зарегистрирован только в 32-битном или 64-битном, а не другом? Запустите 32-разрядную и 64-разрядную PowerShell и запустите 'Get-WmiObject -List Win32_PerfRawData_Teradici *'. –