PowerShell 是微软为Windows 环境所开发的shell 及脚本语言技术,这项全新的技术提供了丰富的控制与自动化的系统管理能力;而“脚本语言”(scripting languages)则是用来编写程序的计算机语言。
脚本语言通常都有简单、易学、易用的特性,目的就是希望能让写程序的人(开发者)快速完成程序的编写工作。
本文将简述脚本语言的起源与目的,并且介绍Windows PowerShell。
脚本语言的源起与目的脚本语言是计算机程序语言(programming languages)的一种,因此也能让开发者藉以编写出让计算机听命行事的程序。
但是「以简单的方式快速完成某些复杂的事情」通常是创造脚本语言的重要原则,基于这项原则,使得脚本语言通常比C、C++ 或Java 之类的「系统程序语言」(system programming languages)「简单」、「容易」,也让脚本语言另有一些所谓「脚本语言的特性」:•语法和结构通常比较简单•学习和使用通常比较简单•通常以容易修改程序的「直译」作为执行方式,而不需要编译•程序的开发产能优于执行效能脚本语言源自早期文字模式的命令列计算机系统,在当时只能以键盘敲入命令才能操作计算机的情况下,为了减少某些需要不断重复敲入命令的情况,计算机操作系统的命令处理器(在UNIX 的世界这通常称为command shell)提供了「批次操作」(batch operation)的方式,让计算机操作者可以将一整个流程的命令,循序、逐行的编排在称为「批处理」(batch file,也称为batch jobs 或shell scripts)的文字文件,若有相同的操作需要处理,即可加载批次档而不需再次重复敲入指令。
Shell Script由于批处理对命令列的计算机系统操作者帮助甚大,因此操作系统的命令处理器也不断加强功能,尤其加入了许多程序语言的重要元素,包括变量、循环、条件判断等等,让计算机操作不只是循序的执行命令,而能更精确的操控计算机系统的运作;这种程序设计通常称为shell programming。
因此,不论是大型主机的系统操作员,或者是整个计算机环境的系统管理员、网络管理员,shell programming 都是相当重要的技能,这项技能可以有效且快速的管理辖下的计算机。
UNIX 系统的shell 相当多样,例如Bourne Shell(sh)、Bourne-Again Shell (bash)、Korn Shell(ksh)、C Shell(csh)等等;以下简述常见的UNIXshell。
•Bourne Shell(sh):这是历史悠久且重要的UNIX shell,是由贝尔实验室的研究员Stephen Bourne 为第七版的UNIX 所创造,这种shell 的执行档扩展名就是.sh。
•Bourne-Again Shell(bash):光从名称就能猜出bash 与sh 是有渊源(甚至说「血缘」)。
bash 是由Brian Fox 于1987 年为GNU 所创造,1990 年起,Chet Ramey 成为主要的维护者。
bash 是相当流行的shell,除了是大多数Linux 预设的shell,在许多UNIX-like 系统也有其踪迹(例如Mac OS X Tiger),甚至也能通过Cygwin 在Windows 系统执行。
•Korn Shell(ksh):是由贝尔实验室的研究员David Korn 在80 年代初期所创造,ksh 除了与sh 完全兼容,也包含了若干 C Shell 的功能。
• C Shell(csh):是由Bill Joy(后来创办了Sun公司)为BSD UNIX 系统所创造。
csh 源自于第六版UNIX 的Thompson shell(是Bourne Shell 的前身),因为语法类似 C 语言而得名。
除了上述盛行于UNIX 环境的shell,其它操作系统也有专属的shell 或shell 脚本语言,例如苹果Mac系统的AppleScript、IBM OS/2 的REXX (REstructured eXtended eXecutor)。
而DOS 以及早期Windows 的shell 则是,但也因功能较弱,因此有4DOS、4NT 等软件可增强功能,Windows 2000 以及之后的Windows 则改以功能较强cmd.exe 作为Windows shell,并且以Windows Script Host 作为脚本语言执行环境,大幅提高了Windows shell 的可用性。
而微软也将会推出功能更强的Windows shell,称为Windows PowerShell。
虽然现在许多计算机系统都提供了图形化的操作方式,但是却都没有因而停止提供文字模式的命令列操作方式,相反的,许多系统反而更加强这部份的功能,例如Windows 就不只加强了操作命令的功能和数量,也一直在改善shell programming 的方式。
而之所以要加强、改善,当然是因为不够好;Windows 的图形化操作方式对单一客户端计算机的操作,已经相当方便,但如果是一群客户端计算机,或者是24 小时运作的服务器计算机,图形化操作方式有时会很不方便。
宏语言宏语言也可视为脚本语言的分支,两者也实质上的相同之处。
宏语言通常附属于某一种软件,例如微软Office、Visual Studio、Adobe Photoshop 都内建了宏语言的功能,使用者可利用软件所附的宏语言,达到自动化的结果(例如调整某个数据夹所有PSD 图文件的分辨率)。
而这类宏语言也大多提供录制宏的功能,自动记录使用者的键盘按键,让使用者不必写程序,就能产生宏程序。
此外,C 语言和汇编语言也有宏功能,是以搜寻及取代进行编译或组译之前的前置处理。
Windows PowerShell 诞生UNIX 的世界有功能强大的shell,现在Windows 环境也有了;WindowsPowerShell 不仅提供功能相当于BASH的命令列shell,同时也内建脚本语言以及辅助脚本程序的工具。
Windows PowerShell 是以.NET 技术为基础,并且与现有的WSH 保持回溯兼容,因此Windows PowerShell 的脚本程序不仅能存取.NET CLR,也能使用现有的COM 技术。
Windows PowerShell 包含了数种系统管理工具、简易且一致的语法,提升管理者处理常见如登录数据库、WMI。
Exchange Server 2007 以及System Center Operations Manager 2007 等服务器软件都将内建Windows PowerShell。
Monad 是Windows PowerShell 之前的项目代号,Microsoft Shell(MSH)则是另一个别名;简而言之,Windows PowerShell 具有以下特点:一致性的设计让所有工具和系统数据的使用语法、命名原则都相同。
Windows PowerShell 的脚本语言不仅简单易学,而且能支持现有的脚本程序和命令列工具。
•内含129 种称为cmdlet 的标准工具,可用来处理常见的系统管理工作,例如登录数据库、系统服务、形成、WMI、事件日志等等。
•具备完整的扩充功能,独立软件商或开发者都能很容易的自行扩充。
下载、安装、执行Windows PowerShellWindows PowerShell 可安装于Windows XP 以及之后的客户端或服务器端Windows 操作系统,包括:•客户端:Windows XP、Windows XP Service Pack 1、Windows XP Service Pack 2、Windows Vista•服务端:Windows Server 2003、Windows Server 2003 R2、Windows Server 2003 Service Pack 1而Windows PowerShell 除了有32 位版本,也还有x64 和ia64 等两个64 位版本,可以安装在这两种64 位Windows 平台。
此外,由于执行Windows PowerShell 需要.NET Framework 2.0,因此请先替计算机安装.NET Framework 2.0。
安装之后,可以利用以下三种方式执行Windows PowerShell:•位于『开始/ 所有程序』的『Windows PowerShell』快捷方式。
•在『开始/ 运行』的『运行』命令窗输入powershell。
•在任何『命令提示字符』窗口的命令提示符号输入powershell。
Windows PowerShell 窗口看起来类似原本的『命令提示字符』窗口,而我通常也都会调整窗口和字型的大小,以方便作业。
初探Windows PowerShell任何shell 都有列出目录、文件的命令,Windows PowerShell 呢?先输入DOS 的dir 试试吧!嗯!dir 果然也通,但是列示的方式不同于以往的dir 指令。
一时兴起,我输入了UNIX 的ls 指令,窗口显示了与dir 指令相同的结果;真有趣(这时候我尚未阅读任何Windows PowerShell 文件,只是很直觉输入指令)。
Windows PowerShell 指令cmdlet 是Windows PowerShell 的指令,这相当于DOS 或其它shell 的内建指令(但是刚刚输入的dir 或ls 并不是cmdlet,这稍后将会说明),cmdlet 的发音方式是command-let。
cmdlet 名称的格式都是以连字符号隔开的一对动词和名词,并且通常都是单数名词。
例如可以在线查询cmdlet 用法的cmdlet 即为get-help。
cmdlet 名称的动词部分大致有get、set、add、remove 等等(Windows PowerShell 的操作与DOS 相同,输入的字母都不分大小写)。
get-help 是颇为重要的cmdlet,可以在线查询所有的Windows PowerShell 指令和说明文件。
例如:•get-help *:列出所有的主题,包括指令和概念。
•get-help * | more:列出所有的主题,包括指令和概念,而且显示满整个窗口就暂停。
•get-help about*:列出所有的概念主题,例如万元字符、foreach 循环。
•get-help get*:列出所有get 开头的主题。
•get-help {<指令名称或主题名称>}:列出指定的指令或主题的说明,例如get-help dir 可以查询dir 指令的用法,而get-help about_wildcard 可以查询「万用字符」这项主题的用法。