一、PowerShell的起因

       微软Windows操作系统最初的设计目标是面向非技术用户, 比尔盖茨的目的是能够让像他妈妈那种不懂计算机甚至是对计算机不感兴趣的人都可以通过图形界面界面简单、直观和形象化的使用计算机。因此, 真正自动化, 强大的Shell一直不是微软公司所关心的问题。随着Windows开拓市场, 用户的反馈等, 微软意识到, 通过图形化工具管理一台计算机或许是很完美的手段, 但是随着企业需要管理的计算机数量提升, 就必须依靠更高效、自动化的计算机配置工具, 这是开发PowerShell的一个重要原因。

 

二、为什么不使用已有的shell或扩展cmd.exe呢? 

       我们熟知的bash, ksh是为unix, linux系统设计的shell, 从这些操作系统内核提供的system call来看, shell将内核的特性真正表现出来。Windows将大部分管理通过面向对象的方式进行管理, 提供了诸如COM, WMI等概念,也就是说Windows操作系统和unix/linux是大不同的, 所以不能直接使用为unix/linux系统设计的shell。传统的shell输出信息都是字符串, 这样有利于统一的处理, 字符串也是你唯一能够操作的对象,Windows已有的cmd可以说是给普通用户或个人用户使用的一套简单命令行工具,而PowerShell则是为了能够让Windows提供企业级的,自动化的,更加强大和优化的管理工具。PowerShell有一些核心的特性, 这些特性是比较复杂的, 他们的存在是为了让传统shell用户能够尽量获得相似的用户体验,对于普通用户, 你不需要理解和掌握这些复杂的特性, 但是对于想深入理解和掌握PowerShell的朋友, 这些特性对你将会产生巨大的帮助,因此选择了重新创建一门新的语言。换句话说cmd是民用且入门级的而PowerShell则是军用且高端级的,定位不同。

 

三、PowerShell的一些特点

       以往cmd相对于Shell有很多不足,比如命令偏少,部分命令功能偏弱,对正则表达式不支持等等。但现在PowerShell一下子就补上来了。2.0 RTM版内建支持414个命令(术语称为cmdlet),支持正则表达式,强大的管道应用(其实管道本身的功能和以前差不多,关键是冒出来一堆能用管道的命令,比如more, sort, foreach等等),和系统的联系也比以前紧密了很多。PowerShell 是一种很强命令行解析程序,还配有高效的脚本开发环境,可以高亮显示语法的正确性,同早期的命令提示符(CMD)相比有很大的不同,命令的可读性有了较大的提升、运行效率也有极大的改善,同时兼容CMD命令与一些Linux命令。

 

四、学好PowerShell的一些感悟

       PowerShell最初的蓝本是Posix的shell标准, 并借鉴了大量的Perl语言中精华, 提供了一个基于对象的脚本环境。并且大量特性与C#语言相同, 因此C#到PowerShell的转换是非常容易的。如果我们有bash, perl, .Net, WMI, COM, VBscript的相关知识, 那么学习PowerShell的过程就会很轻松很短暂更短。但是对于掌握unix/linux下的bash, ksh用户, 最困难的步骤是对问题的处理方式, 思维方式转变。

 

 

五、一些简单的基本例子
       相对于传统的命令行工具,PowerShell对很多用户来说都会显得非常陌生。究竟 PowerShell支持哪些命令呢?其实PowerShell可以管理系统进程,服务,注册表,系统日志甚至证书等多项内容。

get-command       想知道它支持哪些命令,只 需要在窗口内输入get-command并按下回画就可以了,这时屏幕上会显示所有PowerShell支持的命令。

get-help       此处除了可以显示命令的类型外,还会显示名称和描述。想查看某个命令的详细用法就可以使用get-helt命令来获得帮助,比如要查看add-content命令的详细内容,就可以输入get-help add-content,按下回车后就会显示命令的名称,摘要,语法,详细说明,相关链接以及备注。要想更深入了解powerShell就要经常获取帮助的。

PowerShell应用简单一例:
   PowerShell可以方便地查看和结束系统内的进程,这样不仅可以监控系统内的可疑进程, 还可以轻松地将其关闭。要想查看当前系统内的进程,就需要打开PowerShell,输入get-process后按下回车,这样系统中进程的句柄,进程名,进程占用处理器时间和进程唯一标识符就会显示出来。
   如果要结束某个或多个进程,就需要记录下进程的唯一标识符,在powerShell中输入Stop-process 一个或多个进程ID,按下回车后进程即可被自动结束。
   用别名快速启动程序
   对于某些常用的命令,powershell还支持将其设置为别名使用。比如需要给get- process设置别外,就可以在powershell中输入set-alias gp get-process,其中gp为命令get-process的别外。按下回车后直接用gp就可以代替get-process命令了。

   同理很多系统内建的工具也可以在powershell中设置别名了,比如在 powershell中输入notepad后就可以启动记事本。要想更快地启动记事本,就可以为其设置别名,输入set-alias np notepad后按下回车,这样再次输入np就可以打开记事本。如下图所示:

 

好了,今天就到这,外出爬山拍照去,下期见!