Skrip WMI Kesalahan Windows 8

Saya mempunyai masalah dengan WMI di mesin dengan Windows 8 Home Edition. Saya perlu mengetahui penggunaan CPU dan ProcessID berdasarkan proses. Saya sudah mencoba banyak cara:

  • ShellEksekusi di Delphi
  • A *.bat dengan kodenya
  • Sebuah *.vbs
  • *.vbs dieksekusi oleh *.bat
  • A *.ps1
  • *.ps1 dieksekusi oleh *.bat

(Mungkin beberapa cara ini bisa sangat bodoh, tapi saya tetap mencobanya)

Di Klik-Pengguna, ini berfungsi dengan sempurna, tetapi pada pemohon mandiri, ini tidak berfungsi. Saya telah membuka Keamanan di WMIMGMT.msi pada beberapa folder dan kebijakan eksekusi (di PowerShell) sekarang TIDAK TERBATAS.

Ini adalah kode pada file *.ps1:

$ErrorActionPreference = "SilentlyContinue"
Stop-Transcript | Out-Null
$ErrorActionPreference = "Continue"
$perflist = (get-wmiobject Win32_PerfFormattedData_PerfProc_Process)
foreach ($p in $peflist) {
  "" + $p.IDProcess + ";" + $p.PercentProcessTime
}

Ini adalah kode pada *.bat

powershell -ExcetutionPolicy Unrestricted -File "C:\Somefolder\PP.ps1" > C:\SomeFolder\output.txt

Yang saya dapatkan hanyalah hasil ini:

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: Kode disalin seperti yang diminta:

  • *.ps1:

    $ErrorActionPreference="SilentlyContinue" 
    Stop-Transcript | out-null 
    $ErrorActionPreference = "Continue"
    $perflist = (get-wmiobject Win32_PerfFormattedData_PerfProc_Process) 
    foreach ($p in $perflist) {
      "" + $p.IDProcess + ";" + $p.PercentProcessorTime
    } 
    
  • *.kelelawar

    powershell -executionPolicy unrestricted -file "C:\MonitorPerformance\test.ps1" > C:\MonitorPerformance\output1.txt
    
  • Output: (Konsultasi inválida = Kueri Tidak Valid; Tidak = masuk; karakter = karakter)

    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
    

person Nick G.    schedule 07.01.2016    source sumber
comment
Apakah Anda dapat menanyakan hal lain dengan WMI?   -  person Matt    schedule 07.01.2016
comment
Pesan kesalahan pada pertanyaan Anda disebabkan oleh nama kelas yang tidak valid (Win32_Win32_PerfFormattedData_PerfProc_Process), yang Anda koreksi. Apakah Anda masih mendapatkan kesalahan?   -  person Ansgar Wiechers    schedule 07.01.2016
comment
Saya belum menguji kelas lain dengan WMI. Jika Anda dapat memberi tahu saya kode untuk diuji, saya akan berterima kasih. Dan untuk menjelaskannya, kode di mesin win8 benar, tetapi saya salah menulis kode di sini   -  person Nick G.    schedule 07.01.2016
comment
Ya, saya masih mengalami kesalahan   -  person Nick G.    schedule 07.01.2016
comment
Saya mendapat kabar saya mengubah $perflist = (get-wmiobject Win32_PerfFormattedData_PerfProc_Process) foreach ($p in $peflist) { "" + $p.IDProcess + ";" + $p.PercentProcessTime } menjadi: get-wmiobject Win32_OperatingSystem (hanya tes) dan berhasil! Aku masih tidak tahu apa yang sedang terjadi...   -  person Nick G.    schedule 07.01.2016
comment
Jelas tidak mungkin Anda mendapatkan kesalahan yang Anda posting dari skrip tempat Anda menjalankan get-wmiobject Win32_PerfFormattedData_PerfProc_Process. Harap edit pertanyaan Anda dan kirimkan kode tepat dan pesan kesalahan. Salin dan tempel. Jangan memparafrasekan. Jangan mengetik dari memori.   -  person Ansgar Wiechers    schedule 08.01.2016
comment
Oke, saya akan berusaha (Mesin win8 ini ada di server di negara bagian lain dari negara saya) (dan bahasanya pt-br, jadi saya terjemahkan lagi)   -  person Nick G.    schedule 08.01.2016
comment
@AnsgarWiechers, itu saja   -  person Nick G.    schedule 08.01.2016
comment
Bisakah Anda memulai wbemtest, menghubungkan dan menghitung instance kelas itu? Coba juga jalankan WMIDiag.   -  person Ansgar Wiechers    schedule 08.01.2016
comment
Saya dapat melihatnya dengan wbemtest , Saya mempunyai ide untuk membuat program dummy x64 untuk mengeksekusi *.bat dan... INI SANGAT BEKERJA! Saya masih mengerti kesal dengan Win8... Terima kasih atas bantuannya   -  person Nick G.    schedule 09.01.2016


Jawaban (2)


ganti ini:

$perflist = (get-wmiobject Win32_Win32_PerfFormattedData_PerfProc_Process)

dengan ini:

$perflist = (get-wmiobject Win32_PerfFormattedData_PerfProc_Process)
person Anthony Stringer    schedule 07.01.2016
comment
Terima kasih atas bantuannya, kawan, tapi saya salah menulis kode di sini (saya menyalin dari komputer lain) - person Nick G.; 07.01.2016
comment
@NickG. Maka Anda perlu mengubah pertanyaan Anda karena kesalahan menunjukkan bahwa inilah masalahnya. Apakah Anda masih mendapatkan kueri yang tidak valid? - person Matt; 07.01.2016
comment
@Matt Saya tidak mengerti bantuan Anda, kesalahannya bukan berarti menghapus Win32 dari Win32_Win32_PerfFormattedData_PerfProc_Process, tetapi terdiri dari windows 8 yang tidak mengizinkan aplikasi mandiri menggunakan WMI. - person Nick G.; 07.01.2016

Windows 8 tidak melakukan tindakan WMI dengan sempurna saat Anda menggunakan aplikasi x32, Saya membuat aplikasi x64 tiruan yang mengeksekusi *.bat dan akhirnya berhasil. Terima kasih atas semua bantuannya.

person Nick G.    schedule 08.01.2016