图 1 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 可以查询「万用字符」这项主题的用法。
此外,也可以用 help 取代 get-help,最大的好处是 help 显示满整个窗口,预设就会自动暂停。
一开始曾经使用了 dir 和 ls,虽然这并不是 cmdlet,但的确可用于 Windows PowerShell。原来这类的指令称为 alias(化名),类似 cmdlet 的快捷方式,例如 dir 和 ls 实际上都是 get-ChildItem 的 alias,get-ChildItem 才是 cmdlet;而 get-ChildItem 的功能,是列出磁盘驱动器指定位置的子项目。
Windows PowerShell 的指令包含了许多内建的 alias,这些 alias 都是我们原本熟悉的 DOS 或 shell 指令,除了上述的 dir 和 ls,例如原本 DOS 指令的 rm、rmdir、rd、cls、copy 等,以及 BASH 的 cat、sleep、clear、cp 等,都是 Windows PowerShell 的 alias,也就是说,可以直接使用这些 alias;若要列出所有的 alias,可以用 get-alias 指令。除了使用内建的 alias,Windows PowerShell 也允许使用者以 set-alias 建立自己的 alias。
除了 cmdlet 和 alias,Windows PowerShell 的指令还有 Application 和 Function 两种类型,前者指的是独立的程序文件(在 DOS 时代称为外部指令),后者是有名称的程序代码区块,也就是函式:不论 Application 或 Function 都可以当作 Windows PowerShell 指令来用,也可以用在脚本程序里。利用 get-command *,可以列出所有的指令。
Windows PowerShell 的管线功能
DOS 或 UNIX shell 都能利用「管线符号」(pipeline symbol),将指令的执行结果移转到另一个指令,让另一个指令处理前一个指令转来的数据。Windows PowerShell 的管线符号也是 |,例如之前用过的 get-help * | more,就是将 get-help * 的结果转给 more,而 more 会让结果显示满整个窗口就暂停。
管线是各种 shell 环境的「黏合」最佳例证,例如管线就黏合了 Windows PowerShell 的各个指令,进而让各个指令完成一件工作。再举几个管线的例子。首先是:
ipconfig | findstr "Address"
被管线黏合的 ipconfig 和 findstr 都是 Win32 既有的外部指令,前者会显示、设定计算机的 IP 地址,后者则能以各种方式找出特定字符串。以上的叙述是将 ipconfig 的执行结果转给 findstr,并让 findstr 找出执行结果的 Address 字符串。
文章来源于领测软件测试网 https://www.ltesting.net/