У меня проблема с WMI в машине с Windows 8 Home Edition. Мне нужно поймать использование ЦП и ProcessID по процессу. Я пытался так много способов:WMI Scripting Windows 8 error
- ShellExecute в Delphi
- A * .bat с кодом
- A * .vbs
- A * .vbs, выполняемом * .bat
- A * .ps1
- A * .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
Редактировать 1: Код скопирован спрашивает:
* .ps1:
$ErrorActionPreference="SilentlyContinue" Stop-Transcript | out-null $ErrorActionPreference = "Continue" $perflist = (get-wmiobject Win32_PerfFormattedData_PerfProc_Process) foreach ($p in $perflist) { "" + $p.IDProcess + ";" + $p.PercentProcessorTime }
* .bat
powershell -executionPolicy unrestricted -file "C:\MonitorPerformance\test.ps1" > C:\MonitorPerformance\output1.txt
Выход: (Consulta inválida = Недопустимый запрос; Нет = в; Caractere = символ)
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
Можете ли вы запросить другие вещи с помощью WMI? – Matt
Сообщение об ошибке в вашем вопросе было вызвано недопустимым именем класса ('Win32_Win32_PerfFormattedData_PerfProc_Process'), которое вы исправили. Вы все еще получаете ошибку? –
Я не тестировал другой класс с WMI.Если вы можете сказать мне код для проверки, я буду благодарен И чтобы объяснить, код в машине win8 был прав, но я написал неправильный код здесь –