我想通过vbscript获取正在运行的应用程序的名称列表,并通过其主窗口标题终止应用程序。这些申请应列在Task Manager -> Applications tab
上
像这样:
在网上搜索后,我发现了像this这样的vbscript:
'FUNCTION
Function ListProcessRunning()
'This function can report names from
'TaskManager -> Processes
sComputerName = "."
Set objWMIService = GetObject("winmgmts:\\" & sComputerName & "\root\cimv2")
sQuery = "SELECT * FROM Win32_Process"
Set objItems = objWMIService.ExecQuery(sQuery)
'iterate all item(s)
For Each objItem In objItems
WScript.Echo objItem.Name
Next
End Function
此vbscript列出Task Manager -> Processes tag
下的所有进程名称,如下所示:
这不是我想要的。
我也发现了这个:
'FUNCTION
Function ListApplicationRunning()
'This function can report names from
'TaskManager -> Application
Set Word = CreateObject("word.application")
For Each x In Word.Tasks
WScript.Echo x.Name
Next
Word.Quit
Set Word = Nothing
End Function
这真的给了我我想要的但是问题是我要运行这个脚本的服务器没有Word
因此对于vbscript没有word.application
而且我无法为它安装一个。
我的问题是如何获取应用程序名称并以该名称终止应用程序?我不确定是否可以仅使用vbscript,可能是vbscript
和cmd
的组合也可以。
答案 0 :(得分:1)
在vbscript中,我们可以做一些类似的尝试:
Option Explicit
Call KillProcessbyName("common-api.jar")
'*********************************************************************************
Sub KillProcessbyName(FileName)
On Error Resume Next
Dim WshShell,strComputer,objWMIService,colProcesses,objProcess
Set WshShell = CreateObject("Wscript.Shell")
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcesses = objWMIService.ExecQuery("SELECT * FROM Win32_Process")
For Each objProcess in colProcesses
If InStr(objProcess.CommandLine,FileName) > 0 Then
If Err <> 0 Then
MsgBox Err.Description,VbCritical,Err.Description
Else
objProcess.Terminate(0)
End if
End If
Next
End Sub
'**********************************************************************************
答案 1 :(得分:1)
FOR /F "usebackq tokens=1-2" %i IN (`tasklist ^|findstr /b "notepad"`) DO taskkill /PID %j