Aracılığıyla paylaş


WMI Görevleri: İşlemler

İşlemler için WMI görevleri, bir işlemin çalıştırıldığı hesap gibi bilgileri alır. İşlem oluşturma gibi eylemler gerçekleştirebilirsiniz. Diğer örnekler için, https://www.microsoft.com/technetkonumundaki TechNet ScriptCenter'ne bakın.

Bu konuda gösterilen betik örnekleri yalnızca yerel bilgisayardan veri alır. Betiği uzak bilgisayarlardan veri almak için kullanma hakkında daha fazla bilgi için bkz. Uzak Bilgisayarda WMI'ye Bağlanma.

Aşağıdaki yordamda betiğin nasıl çalıştırıldığı açıklanmaktadır.

Betik çalıştırmak için

  1. Kodu kopyalayın ve filename.vbsgibi .vbs uzantısına sahip bir dosyaya kaydedin. Metin düzenleyicinizin dosyaya .txt uzantısı eklemediğinden emin olun.
  2. Bir komut istemi penceresi açın ve dosyayı kaydettiğiniz dizine gidin.
  3. Komut istemine cscript filename.vbs yazın.
  4. Olay günlüğüne erişemiyorsanız Yükseltilmiş komut isteminden çalıştırılıp çalıştıramadığınızı denetleyin. Güvenlik Olay Günlüğü gibi bazı Olay Günlüğü, Kullanıcı Erişim Denetimleri (UAC) tarafından korunabilir.

Not

Varsayılan olarak, cscript komut istemi penceresinde bir betiğin çıkışını görüntüler. WMI betikleri büyük miktarda çıkış üretebileceğinden, çıkışı bir dosyaya yeniden yönlendirmek isteyebilirsiniz. filename.vbs betiğinin çıktısını outfile.txtyönlendirmek için komut istemine cscript filename.vbs > outfile.txt yazın.

Aşağıdaki tabloda, yerel bilgisayardan çeşitli veri türlerini almak için kullanılabilecek betik örnekleri listelenmiştir.

Nasıl... WMI sınıfları veya yöntemleri
... gizli pencerede bir uygulama çalıştırılasın mı? Win32_Process ve Win32_ProcessStartup sınıflarını kullanan bir betikten uygulamayı çağırın.
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)
... yerel bilgisayarda hangi betiklerin çalıştırıldığı belirlensin mi?

Win32_Process sınıfını kullanın ve adı Cscript.exe veya Wscript.exeolan tüm işlemleri döndürür. Bu işlemlerde çalışan betikleri tek tek belirlemek için CommandLine özelliğinin değerini denetleyin.

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
... bir işlemin çalıştırıldığı hesap adını öğrenmek mi?

Win32_Process sınıfını ve GetOwner yöntemini kullanın.

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 }
... çalışan bir işlemin önceliğini değiştirsin mi?

Win32_Process sınıfını ve SetPriority yöntemini kullanın.

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) }
... betik kullanarak bir işlem sonlandırılasın mı?

Win32_Process sınıfını ve Terminate yöntemini kullanın.

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() }
... her işlemin ne kadar işlemci süresi ve bellek kullandığını belirlemek mi?

KernelModeTime, WorkingSetSize, PageFileUsageve PageFaultsgibi Win32_Process sınıfını ve özelliklerini kullanın.

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
... uzak bilgisayarda hangi uygulamaların çalıştığını söyleyebilir misiniz?

Win32_Process sınıfını kullanın.

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

Betikler ve Uygulamalar için WMI Görevlerini

WMI C++ Uygulama Örnekleri

TechNet ScriptCenter