我正在尝试创建一个VBscript,它会杀死作为参数(参数)传入的Windows进程。我有以下代码,并认为问题是在第8,18或24行,但我不知道问题是什么。当我用notepad.exe而不是变量替换该代码时,它可以工作。任何帮助都会很棒。感谢。
Dim prcid
Dim check
Dim Inp
Set Inp = WScript.Arguments
check=0
Set objService = GetObject("winmgmts:")
For Each Process In objService.InstancesOf("Win32_process")
If process.name= "Inp" Then
prcid=process.processid
check=1
Exit For
End If
Next
If check =0 Then
WScript.Quit [ExitCode]
End if
For Each process In objService.InstancesOf("Win32_process")
If process.name= "Inp" Then
If process.processid=prcid Then
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery _
("SELECT * FROM Win32_Process WHERE Name = 'Inp'")
For Each objProcess in colProcessList
objProcess.Terminate()
Next
End If
Exit For
End If
Next
答案 0 :(得分:0)
你确定没有Inp的扩展名,因为当我在Windows XP系统上运行脚本时它运行正常。同样在我的系统上,所有进程都有一个扩展名,除了 系统和系统空闲过程。如果有扩展名,则需要使用它。
答案 1 :(得分:0)
您正在使用变量作为文字:
1. process.name= "Inp"
应为process.name = Inp
(两次)
2. "SELECT * FROM Win32_Process WHERE Name = 'Inp'"
应为"SELECT * FROM Win32_Process WHERE Name = '" & Inp & "'"
您使用的WScript.Arguments
对象不正确:要从命令行获取第一个参数,请使用WScript.Arguments(0)
免责声明:我没有使用这些增强功能测试您的代码,我只是第一眼就发现了这些错误。里面可能会有更多潜伏。
答案 2 :(得分:0)
我在互联网上发现了它已在很多系统上测试过
在以下平台上验证
服务器8否
Windows Server 2008 R2是
Windows Server 2008是
Windows Server 2003是
Windows 8否
Windows 7是
Windows Vista是
Windows XP是
Windows 2000是
脚本名称:WMI_KillProcess.vbs 创建于:10/05/2010 作者:Dennis Hemken 目的:此功能按名称杀死进程, 它运行在网络中的特殊PC上。
Dim strComputer
strComputer = "."
fct_KillProcess "acrord32", strComputer
' or
' strComputer = "192.168.2.13"
' fct_KillProcess "outlook", strComputer
Public Function fct_KillProcess(strProcessName, strComputer)
Dim objWMI
Dim colServices
Dim objService
Dim strServicename
Dim ret
Set objWMI = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colServices = objWMI.InstancesOf("win32_process")
For Each objService In colServices
strServicename = LCase(Trim(CStr(objService.Name) & ""))
If InStr(1, strServicename, LCase(strProcessName), vbTextCompare) > 0 Then
ret = objService.Terminate
End If
Next
Set colServices = Nothing
Set objWMI = Nothing
End Function