As tarefas WMI para processos obtêm informações como a conta na qual um processo está em execução. Você pode executar ações como a criação de processos. Para obter outros exemplos, consulte o TechNet ScriptCenter em https://www.microsoft.com/technet.
Os exemplos de script mostrados neste tópico obtêm dados somente do computador local. Para obter mais informações sobre como usar o script para obter dados de computadores remotos, consulte Conectando-se ao WMI em um computador remoto.
O procedimento a seguir descreve como executar um script.
Executar um script
- Copie o código e salve-o em um arquivo com uma extensão .vbs, como filename.vbs. Verifique se o editor de texto não adiciona uma extensão .txt ao arquivo.
- Abra uma janela do prompt de comando e navegue até o diretório onde você salvou o arquivo.
- Digite cscript filename.vbs no prompt de comando.
- Se você não puder acessar um log de eventos, verifique se está em execução em um prompt de comando com privilégios elevados. Alguns Logs de Eventos, como o Log de Eventos de Segurança, podem ser protegidos pelos Controles de Acesso do Usuário (UAC).
Nota
Por padrão, o cscript exibe a saída de um script na janela do prompt de comando. Como os scripts WMI podem produzir grandes quantidades de saída, convém redirecionar a saída para um arquivo. Digite cscript filename.vbs > outfile.txt no prompt de comando para redirecionar a saída do script filename.vbs para outfile.txt.
A tabela a seguir lista exemplos de script que podem ser usados para obter vários tipos de dados do computador local.
| ... executar um aplicativo em uma janela oculta? |
Chame o aplicativo de um script que usa as classes Win32_Process e 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)
|
|
| ... determinar quais scripts estão em execução no computador local? |
Use a classe Win32_Process e retorne todos os processos com o nome Cscript.exe ou Wscript.exe. Para determinar os scripts individuais em execução nesses processos, verifique o valor da propriedade 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
|
|
| ... descobrir o nome da conta em que um processo está em execução? |
Use a classe Win32_Process e o método 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 }
|
|
| ... alterar a prioridade de um processo em execução? |
Use a classe Win32_Process e o métodoSetPriority.
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) }
|
|
| ... encerrar um processo usando um script? |
Use a classe Win32_Process e o método 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() }
|
|
| ... determinar quanto tempo de processador e memória cada processo está usando? |
Use a classe Win32_Process e propriedades como KernelModeTime, WorkingSetSize, PageFileUsagee 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
|
|
| ... dizer quais aplicativos estão em execução em um computador remoto? |
Use a classe 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
|
|
-
tarefas WMI para scripts e aplicativos
-
exemplos de aplicativo WMI C++
-
do TechNet ScriptCenter