Megosztás a következőn keresztül:


WMI-feladatok: Folyamatok

A folyamatok WMI-feladatai olyan információkat szereznek be, mint például az a fiók, amelyen egy folyamat fut. Olyan műveleteket hajthat végre, mint a folyamatok létrehozása. További példákért tekintse meg a TechNet ScriptCentert https://www.microsoft.com/technet.

Az ebben a témakörben bemutatott példaszkriptek csak a helyi számítógépről szereznek be adatokat. A parancsfájl távoli számítógépekről történő lekéréséről további információt a Csatlakozás a WMI-hez távoli számítógépencímű témakörben talál.

Az alábbi eljárás egy szkript futtatását ismerteti.

Szkript futtatásához

  1. Másolja ki a kódot, és mentse egy .vbs kiterjesztésű fájlba, például filename.vbs. Győződjön meg arról, hogy a szövegszerkesztő nem ad hozzá .txt kiterjesztést a fájlhoz.
  2. Nyisson meg egy parancssori ablakot, és keresse meg azt a könyvtárat, ahová a fájlt mentette.
  3. Írja be cscript filename.vbs a parancssorba.
  4. Ha nem tud hozzáférni egy eseménynaplóhoz, ellenőrizze, hogy rendszergazda jogú parancssorból fut-e. Egyes eseménynaplók, például a biztonsági eseménynaplók felhasználói hozzáférés-vezérléssel (UAC) védhetők.

Jegyzet

Alapértelmezés szerint a cscript megjeleníti egy szkript kimenetét a parancssori ablakban. Mivel a WMI-szkriptek nagy mennyiségű kimenetet képesek előállítani, érdemes lehet átirányítani a kimenetet egy fájlba. Írja be cscript filename.vbs > outfile.txt parancssorba a filename.vbs szkript kimenetének átirányításához outfile.txt.

Az alábbi táblázat olyan példaszkripteket sorol fel, amelyekkel különböző típusú adatokat szerezhet be a helyi számítógépről.

Hogyan... WMI-osztályok vagy metódusok
... futtat egy alkalmazást egy rejtett ablakban? Hívja meg az alkalmazást egy szkriptből, amely a Win32_Process és Win32_ProcessStartup osztályokat használja.
VB
Const HIDDEN_WINDOW = 0
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set objStartup = objWMIService.Get("Win32_ProcessStartup")
Set objConfig = objStartup.SpawnInstance_
objConfig.ShowWindow = HIDDEN_WINDOW
Set objProcess = GetObject("winmgmts:root\cimv2:Win32_Process")
errReturn = objProcess.Create( "Notepad.exe", null, objConfig, intProcessID)
PowerShell
$startup=[wmiclass]"Win32_ProcessStartup"
$startup.Properties['ShowWindow'].value=$False
([wmiclass]"win32_Process").create('notepad.exe','C:\',$Startup)
... határozza meg, hogy mely szkriptek futnak a helyi számítógépen?

Használja a Win32_Process osztályt, és adja vissza az összes folyamatot Cscript.exe vagy Wscript.exenéven. Az ezekben a folyamatokban futó egyes szkriptek meghatározásához ellenőrizze a CommandLine tulajdonság értékét.

VB
strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Process" & _
           " WHERE Name = 'cscript.exe'" & " OR Name = 'wscript.exe'",,48) 
For Each objItem in colItems 
    Wscript.Echo "-------------------------------------------"
    Wscript.Echo "CommandLine: " & objItem.CommandLine
    Wscript.Echo "Name: " & objItem.Name
Next
PowerShell
$strComputer = "."
Get-WmiObject -Class "Win32_Process" -ComputerName "." | `
     where {($_.name -eq 'cscript.exe') -or ($_.name -eq 'wscript.exe') } | `
     Format-List -Property CommandLine, Name
... megtudhatja, hogy melyik fióknév alatt fut egy folyamat?

Használja a Win32_Process osztályt és a GetOwner metódust.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery ("Select * from Win32_Process")
For Each objProcess in colProcessList
    colProperties = objProcess.GetOwner( strNameOfUser,strUserDomain)
    Wscript.Echo "Process " & objProcess.Name & " is owned by " & strUserDomain & "\" & strNameOfUser & "."
Next
PowerShell
Get-WmiObject -class win32_process -ComputerName "." | ForEach-Object { $_.GetOwner() | Select -Property domain, user }
... módosítja egy futó folyamat prioritását?

Használja a Win32_Process osztályt és a SetPriority metódust.

VB
Const ABOVE_NORMAL = 32768
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcesses = objWMIService.ExecQuery ("Select * from Win32_Process Where Name = 'Notepad.exe'")
For Each objProcess in colProcesses
    objProcess.SetPriority(ABOVE_NORMAL) 
Next
PowerShell
$ABOVE_NORMAL = 32768
$strComputer = "."
$colProcesses = Get-WmiObject -Class Win32_Process -ComputerName $strComputer | Where-Object { $_.name -eq 'Notepad.exe' }
foreach ($objProcess in $colProcesses) { $objProcess.SetPriority($ABOVE_NORMAL) }
... szkripttel leállítja a folyamatot?

Használja a Win32_Process osztályt és a Terminate metódust.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery ("Select * from Win32_Process Where Name = 'Notepad.exe'")
For Each objProcess in colProcessList
    objProcess.Terminate()
Next
PowerShell
$strComputer = "."
$colProcesses = Get-WmiObject -Class Win32_Process -ComputerName $strComputer | Where-Object { $_.name -eq 'Notepad.exe' }
foreach ($objProcess in $colProcesses) { $objProcess.Terminate() }
... határozza meg, hogy az egyes folyamatok mennyi processzoridőt és memóriát használnak?

Használja a Win32_Process osztályt és tulajdonságokat, például KernelModeTime, WorkingSetSize, PageFileUsageés PageFaults.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcesses = objWMIService.ExecQuery("Select * from Win32_Process")
For Each objProcess in colProcesses
    Wscript.Echo "Process: " & objProcess.Name
    sngProcessTime = (CSng(objProcess.KernelModeTime) + CSng(objProcess.UserModeTime)) / 10000000
    Wscript.Echo "Processor Time: " & sngProcessTime
    Wscript.Echo "Process ID: " & objProcess.ProcessID
    Wscript.Echo "Working Set Size: " & objProcess.WorkingSetSize
    Wscript.Echo "Page File Size: " & objProcess.PageFileUsage
    Wscript.Echo "Page Faults: " & objProcess.PageFaults
Next
PowerShell
$strComputer = "."
Get-WmiObject -Class "Win32s_Process" -ComputerName $strComputer | `
     Format-List -Property Name, KernelModeTime, UserModeTime, ProcessID, WorkingSetSize, PageFileUsage, PageFaults
... milyen alkalmazások futnak egy távoli számítógépen?

Használja a Win32_Process osztályt.

VB
strComputer = "atl-dc-01"
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery ("Select * from Win32_Process")
For Each objProcess in colProcessList
    Wscript.Echo "Process: " & objProcess.Name 
    Wscript.Echo "Process ID: " & objProcess.ProcessID 
    Wscript.Echo "Thread Count: " & objProcess.ThreadCount 
    Wscript.Echo "Page File Size: " & objProcess.PageFileUsage 
    Wscript.Echo "Page Faults: " & objProcess.PageFaults 
    Wscript.Echo "Working Set Size: " & objProcess.WorkingSetSize 
Next
PowerShell
strComputer = "atl-dc-01"
get-wmiObject -class Win32_Process -Namespace "root\cimv2" -ComputerName $strComputer | `
   Format-list Name, ProcessID, ThreadCount, PageFileUsage, PageFaults, WorkingSetSize

WMI-feladatok szkriptekhez és alkalmazásokhoz

WMI C++ alkalmazás példák

TechNet ScriptCenter