ฉันมีปัญหากับ WMI ในเครื่องที่ใช้ Windows 8 Home Edition ฉันต้องจับการใช้งาน CPU และ ProcessID ตามกระบวนการ ฉันได้ลองหลายวิธีแล้ว:
- เชลล์ดำเนินการใน Delphi
- A *.bat พร้อมรหัส
- ก *.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 }
*.ค้างคาว
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