Задачи WMI для процессов получают такие сведения, как учетная запись, в которой выполняется процесс. Вы можете выполнять такие действия, как создание процессов. Другие примеры см. в разделе TechNet ScriptCenter в https://www.microsoft.com/technet.
Примеры скриптов, показанные в этом разделе, получают данные только с локального компьютера. Дополнительные сведения об использовании скрипта для получения данных с удаленных компьютеров см. в подключении к WMI на удаленном компьютере.
В следующей процедуре описывается запуск скрипта.
Запуск скрипта
- Скопируйте код и сохраните его в файле с расширением VBS, например filename.vbs. Убедитесь, что текстовый редактор не добавляет в файл расширение .txt.
- Откройте окно командной строки и перейдите в каталог, в котором сохранен файл.
- В командной строке введите cscript filename.vbs.
- Если вы не можете получить доступ к журналу событий, проверьте, работает ли вы в командной строке с повышенными привилегиями. Некоторые журналы событий, такие как журнал событий безопасности, могут быть защищены элементами управления доступом пользователей (UAC).
Заметка
По умолчанию cscript отображает выходные данные скрипта в окне командной строки. Так как скрипты WMI могут создавать большие объемы выходных данных, может потребоваться перенаправить выходные данные в файл. Введите cscript filename.vbs > outfile.txt в командной строке, чтобы перенаправить выходные данные скрипта filename.vbs на outfile.txt.
В следующей таблице перечислены примеры скриптов, которые можно использовать для получения различных типов данных с локального компьютера.
... запустите приложение в скрытом окне? |
Вызовите приложение из скрипта, использующего классы Win32_Process и Win32_ProcessStartup.
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)
|
$startup=[wmiclass]"Win32_ProcessStartup"
$startup.Properties['ShowWindow'].value=$False
([wmiclass]"win32_Process").create('notepad.exe','C:\',$Startup)
|
|
... определите, какие скрипты выполняются на локальном компьютере? |
Используйте класс Win32_Process и возвращает все процессы с именем Cscript.exe или Wscript.exe. Чтобы определить отдельные скрипты, выполняемые в этих процессах, проверьте значение свойства CommandLine.
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
|
$strComputer = "."
Get-WmiObject -Class "Win32_Process" -ComputerName "." | `
where {($_.name -eq 'cscript.exe') -or ($_.name -eq 'wscript.exe') } | `
Format-List -Property CommandLine, Name
|
|
... Узнайте имя учетной записи, в которой выполняется процесс? |
Используйте класс Win32_Process и метод GetOwner.
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
|
Get-WmiObject -class win32_process -ComputerName "." | ForEach-Object { $_.GetOwner() | Select -Property domain, user }
|
|
... измените приоритет выполняющегося процесса? |
Используйте класс Win32_Process и методSetPriority.
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
|
$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) }
|
|
... завершите процесс с помощью скрипта? |
Используйте класс Win32_Process и метод Terminate.
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
|
$strComputer = "."
$colProcesses = Get-WmiObject -Class Win32_Process -ComputerName $strComputer | Where-Object { $_.name -eq 'Notepad.exe' }
foreach ($objProcess in $colProcesses) { $objProcess.Terminate() }
|
|
... определите, сколько времени процессора и памяти используется каждый процесс? |
Используйте класс Win32_Process и свойства, такие как KernelModeTime, WorkingSetSize, PageFileUsageи PageFaults.
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
|
$strComputer = "."
Get-WmiObject -Class "Win32_Process" -ComputerName $strComputer | `
Format-List -Property Name, KernelModeTime, UserModeTime, ProcessID, WorkingSetSize, PageFileUsage, PageFaults
|
|
... расскажите, какие приложения выполняются на удаленном компьютере? |
Используйте класс Win32_Process.
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
|
strComputer = "atl-dc-01"
get-wmiObject -class Win32_Process -Namespace "root\cimv2" -ComputerName $strComputer | `
Format-list Name, ProcessID, ThreadCount, PageFileUsage, PageFaults, WorkingSetSize
|
|
-
задачи WMI для сценариев и приложений
-
примеры приложений WMI C++
-
TechNet ScriptCenter