[原创]windows下用wmic查找进程路径并杀死进程_VMware, Unix及操作系统讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  VMware, Unix及操作系统讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2647 | 回复: 0   主题: [原创]windows下用wmic查找进程路径并杀死进程        下一篇 
wulcan
版主
等级:中校
经验:1795
发帖:124
精华:0
注册:2014-3-19
状态:离线
发送短消息息给wulcan 加好友    发送短消息息给wulcan 发消息
发表于: IP:您无权察看 2015-1-23 14:49:15 | [全部帖] [楼主帖] 楼主

系统中了毒,任务管理器打不开了,想查看当前的系统任务并且杀死可疑进程怎么办?
当然可以用tasklist来查看,但是这只能看到进程的名字,怎么样看到执行的文件位置呢?
遇到这种情况,你可以试一下wmic,wmic是一个强大的命令,有上百个子命令,用好它可以使管理事半功倍,比Linux下的busybox丝毫不逊色!

先来看我们的任务,查找并杀死可疑的进程:

命令行的套路:先win+r,调出运行,然后cmd,看到黑底白字就可以进行下一步了:

输入wmic并回车,看到一个cli的提示,这是进入了它的cli模式,这个已经不是命令行本身的提示符了,所有的输入都到wmic了,想dir看一下可是不行的:

Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.

C:\Documents and Settings\Administrator>wmic
wmic:root\cli>


简单一点,可以在这个模式下输入process,就看到当前的运行程序以及路径了,但是显示的一大堆,看起来可不容易。显示的结果中,每行一个进程,注意无论是行和列,这仅仅显示了其中非常小的一部分,完整的内容不仅会多很多行,而且共有几十列,你别忘了有水平滚动条:

C:\Documents and Settings\hx>wmic
wmic:root\cli>process
Caption              CommandLine
System Idle Process
System
smss.exe             \SystemRoot\System32\smss.exe
csrss.exe            C:\WINDOWS\system32\csrss.exe ObjectDirectory=\Wi
winlogon.exe         winlogon.exe
services.exe         C:\WINDOWS\system32\services.exe
lsass.exe            C:\WINDOWS\system32\lsass.exe
VBoxService.exe      system32\VBoxService.exe
logonui.exe          logonui.exe /status
svchost.exe          C:\WINDOWS\system32\svchost -k DcomLaunch
svchost.exe          C:\WINDOWS\system32\svchost -k rpcss
svchost.exe          C:\WINDOWS\system32\svchost.exe -k netsvcs
svchost.exe          C:\WINDOWS\system32\svchost.exe -k NetworkService
svchost.exe          C:\WINDOWS\system32\svchost.exe -k LocalService
……


既然看起来很麻烦,有没有简洁一些的方式呢,比如我们一般只需要看几列:进程名,文件路径,pid号,还有磁盘读写速率。

wmic process get Name,ProcessId,ReadTransferCount,WriteTransferCount,ExecutablePath


后面那些词,都是在process命令中显示的列名,不知道的话过去查一下就可以了,根据英文意思也比较好理解,另外注意多个参数之间是英文的逗号,中文逗号不可以,会报无效的wmi错误。
实际应用中,为了简化输出,你可以用少量的列:

wmic:root\cli>process get Name,ProcessId
Name                 ProcessId
System Idle Process  0
System               4
smss.exe             596
csrss.exe            644
winlogon.exe         668
services.exe         712
lsass.exe            724
VBoxService.exe      916
logonui.exe          924
svchost.exe          980
svchost.exe          1068
svchost.exe          1208
svchost.exe          1260
svchost.exe          1800
……


达到我们的目的,查找文件的路径,注意前两个没有路径,是因为它们是内核程序:

wmic:root\cli>process get Caption,ProcessId,ExecutablePath
Caption              ExecutablePath                                ProcessId
System Idle Process                                                0
System                                                             4
smss.exe             C:\WINDOWS\System32\smss.exe                  384
csrss.exe            C:\WINDOWS\system32\csrss.exe                 668
winlogon.exe         C:\WINDOWS\system32\winlogon.exe              756
services.exe         C:\WINDOWS\system32\services.exe              880
lsass.exe            C:\WINDOWS\system32\lsass.exe                 892
nvsvc32.exe          C:\WINDOWS\system32\nvsvc32.exe               1088
svchost.exe          C:\WINDOWS\system32\svchost.exe               1172
svchost.exe          C:\WINDOWS\system32\svchost.exe               1256
svchost.exe          C:\WINDOWS\system32\svchost.exe               1396
svchost.exe          C:\WINDOWS\system32\svchost.exe               1476
svchost.exe          C:\WINDOWS\system32\svchost.exe               1516
explorer.exe         C:\WINDOWS\Explorer.EXE                       1740
ctfmon.exe           C:\WINDOWS\system32\ctfmon.exe                460
mstsc.exe            C:\WINDOWS\system32\mstsc.exe                 304
firefox.exe          C:\Program Files\Mozilla Firefox\firefox.exe  1364
cmd.exe              C:\WINDOWS\system32\cmd.exe                   820
conime.exe           C:\WINDOWS\system32\conime.exe                640


杀死进程呢?好办啊!加delete:

wmic:root\cli>process delete


删除 '\\2012-20140609RB\ROOT\CIMV2:Win32_Process.Handle="0"' 吗(Y/N/?)?
删除 '\\2012-20140609RB\ROOT\CIMV2:Win32_Process.Handle="4"' 吗(Y/N/?)? n

删除 '\\2012-20140609RB\ROOT\CIMV2:Win32_Process.Handle="384"' 吗(Y/N/?)? n
删除 '\\2012-20140609RB\ROOT\CIMV2:Win32_Process.Handle="668"' 吗(Y/N/?)? n
删除 '\\2012-20140609RB\ROOT\CIMV2:Win32_Process.Handle="756"' 吗(Y/N/?)? n
删除 '\\2012-20140609RB\ROOT\CIMV2:Win32_Process.Handle="880"' 吗(Y/N/?)? n
……
会逐个询问是不是删除,后面的数字是pid号,当然最好别乱删除了。

这样操作还是比较麻烦,如果进程多了,那要打很多n和y,能一次删除一个进程吗?那就再加个where参数吧:

wmic:root\cli>process where ProcessId="1768" delete


删除 '\\2012-20140609RB\ROOT\CIMV2:Win32_Process.Handle="1768"' 吗(Y/N/?)? y
删除范例 \\2012-20140609RB\ROOT\CIMV2:Win32_Process.Handle="1768"
范例删除成功。

wmic:root\cli>


注意:1)delete要在where之后;
   2)where后的条件中,等号可以换成其他符号,比如><等;
   3)等号前面必须是process list的列名,后面要用引号引起来;
   4)where条件中,可以使用其他列,比如name,这样比较干脆利落。

总结:wmic是一个强大的命令,这只是它的冰山一角,但上面介绍了它的基本用法和注意事项,详细可以看微软的官方文档

https://technet.microsoft.com/zh-cn/library/cc779482%28WS.10%29.aspx


,或者使用
   wmic /? 来查看详细的使用方法。




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论