由于用.net开发,少不了跟window服务器做交互。window系统的交互的确方便,但如果要做一些快速操作还是cmd比较快,而且不可能每个人都远程连接到服务器去操作、查看。
虽然window有powershell弥补cmd的不足,但Powershell的执行效率始终是个问题,而且cmd已经够我们日常的操作。
下面列出我常用的cmd操作指令。
1、help
help指令会列出cmd一系列原生的指令,以及其简单的描述。
如果要对某个cmd指令做详细的帮助,可以输入
xx /? (xx为指令名)
2、call
执行一个bat程序,如果有一些常用的一系列cmd指令,我们可以写成一个bat文件,然后用call来执行。
3、findstr
在文件中搜索字符串,类似于shell的grep,但弱很多。
-- 查询准确字符串
findstr /n /l xxx doc.log
-- 查询模糊字符串
findstr /n /r xxx doc.log
其中“/n”是表示显示匹配行的行号,而查询模糊字符串的通配符并不是正则,是微软规定的通配符,如下所示:
一般表达式的快速参考:
. 通配符: 任何字符
* 重复: 以前字符或类别出现零或零以上次数
^ 行位置: 行的开始
$ 行位置: 行的终点
[class] 字符类别: 任何在字符集中的字符
[^class] 补字符类别: 任何不在字符集中的字符
[x-y] 范围: 在指定范围内的任何字符
\x Escape: 元字符 x 的文字用法
\<xyz 字位置: 字的开始
xyz\> 字位置: 字的结束
还需要注意的是,findstr是以操作系统的默认编码打开文本文件的,因此如果文本是unicode编码的话,便搜索不了,会乱码显示。
4、type
显示文本的内容,跟findstr一样,有编码的缺点。
5、tasklist
查询目前执行的进程状况,直接输入tasklist就直接以table形式列出所有进程的状况。
tasklist提供参数可以过滤信息,比如我们只想看w3wp进程的信息。
tasklist /fi "Imagename eq w3wp.exe"
我们想看使用内存大于500000k的进程
tasklist /fi "memusage gt 50000"
相叠加条件的话,可以多个/fi即可。
tasklist 还提供一个参数 /M ,让我们可以查看进程加载dll的情况。
tasklist /fi "Imagename eq w3wp.exe" /m
这样就可以清楚看到各个w3wp.exe所加载dll的情况,我们就可以分出哪个w3wp进程在管理哪个web程序。(本人通常看到服务器运行n个w3wp.exe,但却无法识别哪个w3wp对应是哪个web程序)
如果我们asp.net的dll有命名规则,比如dll都以公司名为开头,如CompanyName.Web.dll
那么可以在/M加上通配符过滤结果。
tasklist /fi "Imagename eq w3wp.exe" /m "CompanyName*"
这样就更清楚列出,这个w3wp具体加载我们dll的情况。
也许这些指令还不够用,微软提供了命令行的扩展包可供下载,
Windows Server 2003 Resource Kit Tools
。直接安装即可使用,但安装后help并不会把这些指令列出来。
1、qgrep
跟findstr类似,用于查询文本中的字符串。
2、tail
跟shell的tail类似,但tail -f功能有时会失灵。。。
关于iis管理操作方面,也有指令可以做简单的控制。
1、iisreset
管理iis的服务,可以查看、停止、重启、开启iis服务。
iisreset /stop 停止iis
iisreset /start 启动iis
iisreset 重启iis
iisreset /status 查看状态
2、iisapp
iisapp用于管理应用程序池,我们更新配置文件需要清除缓存的时候,需要回收进程池。
我们可以用iisapp列出当前启用的进程池。
然后用
iisapp /a "appname" /r
回收进程池
一般cmd我们只可以操作本机,操作远程机器的我们需要借助微软的
PsTools。
pstools本身也有很多有用的指令,但远程的话,我们就只用psexec。
操作很简单,只需要客户端有pstools即可,服务器不用做额外服务配置,输入如下
psexec \\[ip或机器名] -u [用户名] -p [密码] cmd.exe
这样就可以操作远程机器的cmd了。