谈到“Shell”,很容易与脚本、编程语言等联系起来,这也是很多ITPro不去钻研PowerShell的原因。很多ITPro们认为用好PowerShell就要涉及到复杂的函数、变量、脚本,这或许是一种误解。其实,PowerShell设计的初衷是作为一个高级管理工具,提供给系统管理员使用的。因此,运行命令以达到管理系统的目的,是我们学习PowerShell的开端。

一、什么是Cmdlet

Cmdlet 是一个原生的 PowerShell 命令行工具,虽然它表面上看与普通的 Dos 命令行工具很相似,却有着本质的不同。Cmdlet 比纯 Dos 命令行命令要复杂很多。在 PowerShell 的控制台窗口中可以执行 Dos 命令行命令,反之则不行。

Screen Shot 2017-01-06 at 09.55.37.png

以上截图是分别在 PowerShell 控制台和 Dos 控制台中执行“get-command” 命令的结果。大家可以看到,左边窗口有结果反馈,而右边的 Dos 窗口是找不到命令的信息。如果我们尝试执行一个 Dos 命令的话,结果会如何呢?

Screen Shot 2017-01-06 at 10.00.10.png

二、Cmdlet的命名惯例

没有规矩不成方圆,PowerShell 的 Cmdlet 也是如此。所有的 Cmdlet 命令都是由“动词”+“-”+“名词(单数形式)”组成的,例如:get(动词)-(破折号)command(名词)。可以通过运行 Get-Verb 来查看允许使用的动词列表。

Screen Shot 2017-01-06 at 10.14.06.png

PowerShell 允许自定义名词,因此并不存在 Get-Noun 的 Cmdlet 来显示所有名词。需要注意的是,并不是所有的动词位置的词都是动词,例如:New、Where,这些词是一些带有动词性质的名词(如果你不理解,请补英文课程)。

这种命名规范最大的好处是:可以预先猜测命令,之后可以用帮助系统或者 Get-Command 命令验证。

三、别名

虽然我们掌握了 PowerShell 的命名规范,但在使用中会发现有些命令实在是太长了,以至于用命令补齐的方式也还是嫌它长,这就是需要“别名”的原因。要想知道一个 Cmdlet 命令是否有别名,请执行如下命令:Get-Alias -Definition "Get-Service"

Screen Shot 2017-01-06 at 10.26.31.png

从上图可以看到 Gsv 是 Get-Service 的别名。也可以用 New-Alias 命令创建自定义的别名,但如果你不导出的话,其生命周期仅限于本次会话。

四、一些术语

【Cmdlet】:原生的 PowerShell 命令行工具,仅存在于 PowerShell 和类似 C# 的.Net Framework 语言中。读音:command-let。

【函数(Function)】:与 Cmdlet 类似,是以 PowerShell 自己的脚本语言编写的。

【工作流(workflow)】:是嵌入 PowerShell 的工作流执行系统的一类特殊函数。

【应用程序】:是任意类型的外部可执行程序,包括类似 Ping、ipconfig 等命令行工具。

【命令】:是一个通用术语,代表任何或所有上面提到的术语。