У меня проблема с WMI на машине с Windows 8 Home Edition. Мне нужно поймать использование ЦП и ProcessID процессом. Я пробовал так много способов:
- ShellExecute в Delphi
- *.bat с кодом
- *.vbs
- *.vbs, выполненный *.bat
- A *.ps1
- *.ps1, выполненный *.bat
(Возможно, некоторые из этих способов могут быть действительно глупыми, но я все равно пробовал)
В User-Click это работает отлично, но в автономном режиме это не работает. Я открыл безопасность на WMIMGMT.msi некоторых папок, и политика выполнения (в PowerShell) теперь НЕОГРАНИЧЕНА.
Это код в файле *.ps1:
$ErrorActionPreference = "SilentlyContinue"
Stop-Transcript | Out-Null
$ErrorActionPreference = "Continue"
$perflist = (get-wmiobject Win32_PerfFormattedData_PerfProc_Process)
foreach ($p in $peflist) {
"" + $p.IDProcess + ";" + $p.PercentProcessTime
}
Это код на *.bat
powershell -ExcetutionPolicy Unrestricted -File "C:\Somefolder\PP.ps1" > C:\SomeFolder\output.txt
Все, что я получил, это этот вывод:
get-wmiobject : Invalid query "select * from Win32_Win32_PerfFormattedData_PerfProc_Process" In C:\Somefolder\PP.ps1:4 character: 14 + $perflist = (get-wmiobject Win32_PerfFormattedData_PerfProc_Process) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [Get-WmiObject], ManagementException + FullyQualifiedErroID : GetWMIManagementException,Microsoft.PowerShell.Commands.GetWmiObjectCommand
Edit1: Код, скопированный в соответствии с запросом:
*.ps1:
$ErrorActionPreference="SilentlyContinue" Stop-Transcript | out-null $ErrorActionPreference = "Continue" $perflist = (get-wmiobject Win32_PerfFormattedData_PerfProc_Process) foreach ($p in $perflist) { "" + $p.IDProcess + ";" + $p.PercentProcessorTime }
*.летучая мышь
powershell -executionPolicy unrestricted -file "C:\MonitorPerformance\test.ps1" > C:\MonitorPerformance\output1.txt
Вывод: (Consulta inválida = Invalid Query; No = in; caractere = character)
get-wmiobject : Consulta inv lida "select * from Win32_PerfFormattedData_PerfProc_Process" No C:\MonitorPerformance\test.ps1:4 caractere:14 + $perflist = (get-wmiobject Win32_PerfFormattedData_PerfProc_Process) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [Get-WmiObject], ManagementException + FullyQualifiedErrorId : GetWMIManagementException,Microsoft.PowerShell.Commands.GetWmiObjectCommand
Win32_Win32_PerfFormattedData_PerfProc_Process
), которое вы исправили. Вы все еще получаете сообщение об ошибке? - person Ansgar Wiechers   schedule 07.01.2016$perflist = (get-wmiobject Win32_PerfFormattedData_PerfProc_Process) foreach ($p in $peflist) { "" + $p.IDProcess + ";" + $p.PercentProcessTime }
на:get-wmiobject Win32_OperatingSystem
(просто тест), и это работает! Я до сих пор понятия не имею, что происходит... - person Nick G.   schedule 07.01.2016get-wmiobject Win32_PerfFormattedData_PerfProc_Process
. Пожалуйста, отредактируйте свой вопрос и опубликуйте точный код и сообщение об ошибке. Скопируйте и вставьте его. Не перефразируйте. Не печатайте по памяти. - person Ansgar Wiechers   schedule 08.01.2016wbemtest
, подключить и перечислить экземпляры этого класса? Также попробуйте запустить WMIDiag. а>. - person Ansgar Wiechers   schedule 08.01.2016