与大多数编程语言一样,PowerShell也有
命令
——泛指一切具名的可执行表达式。命令的形式多样,可以是惯常的ping.exe工具,也可以是前面提到的
Get-Alias
命令。甚至还可以自建命令。但如果使用不存在的命令,则会看到一段不招人喜欢的红色错误文本,如代码清单1-2所示。
代码清单1-2 输入的命令无法识别时,显示一段错误文本
PS> foo
foo : The term 'foo' is not recognized as the name of a cmdlet, function,
script file, or operable program. Check the spelling of the name, or if a
path was included, verify that the path is correct and try again.
At line:1 char:1
+ foo
+ ~~~
+ CategoryInfo : ObjectNotFound: (foo:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
执行
Get-Command
命令可以列出PowerShell默认支持的所有命令。可以从这个列表中发现一个常用的模式:多数命令的名称遵从“动词-名词”形式。这是PowerShell的一大特性。为了确保语言简洁直观,微软为命令名称制定了一些指导方针。尽管这种命名约定不是强制性的,但强烈推荐自建命令时遵守。
PowerShell命令分为以下几类:cmdlet、函数、别名和外部脚本。微软提供的多数内置命令是cmdlet,通常使用C#等其他语言编写。执行
Get-Command
命令得到的结果中有一个
CommandType
字段,如代码清单1-3所示。
代码清单1-3
显示
Get-Alias
命令的类型
PS> Get-Command -Name Get-Alias
CommandType Name Version Source
----------- ---- ------- ------
Cmdlet Get-Alias 3.1.0.0 Microsoft.PowerShell.Utility
函数 则是使用PowerShell编写的命令。为了完成手头的任务,我们编写的往往就是函数;cmdlet一般留给PowerShell软件的开发者来写。cmdlet和函数是PowerShell中最常使用的两种命令类型。
我们将使用
Get-Command
命令探索PowerShell中可用的众多cmdlet和函数。你会发现,如果只输入
Get-Command
,不带任何参数,则控制台输出的内容很多,要向下滚动很长一段距离才能看完所有可用的命令。
在PowerShell中,很多命令有
参数
——提供(或传递)给命令的值,以用于定制命令的行为。例如,
Get-Command
就有一些参数,用以指定只返回特定的命令,而不显示全部命令。浏览
Get-Command
的输出,你会注意到几个常用的动词,如
Get
、
Set
、
Update
和
Remove
。你可能会想,以
Get
开头的命令是获取信息的,其他命令则是修改信息的。没错,你是对的。PowerShell就是这么直来直往。命令的名称都很直观,一般都表明了其意图。
我们刚开始学习,肯定不想随意改动系统,而是想从不同的源头获取信息。鉴于此,可以将
Verb
参数传给
Get-Command
命令,从而限制性地列出使用动词
Get
的命令。为此,在提示符中输入下列命令:
PS> Get-Command -Verb Get
不难发现,这个命令输出的内容依然很多。可以再加上
Noun
参数,以指定名词部分为
Content
,从而进一步限制输出结果,如代码清单1-4所示。
代码清单1-4
只显示动词为
Get
、名词为
Content
的命令
PS> Get-Command -Verb Get -Noun Content
CommandType Name Version Source
----------- ---- ------- ------
Cmdlet Get-Content 3.1.0.0 Microsoft.PowerShell.Management
如果发现结果太少,可以只传递
Noun
参数,而不提供
Verb
参数,如代码清单1-5所示。
代码清单1-5
只显示名词为
Content
的命令
PS> Get-Command -Noun Content
CommandType Name Version Source
----------- ---- ------- ------
Cmdlet Add-Content 3.1.0.0 Microsoft.PowerShell.Management
Cmdlet Clear-Content 3.1.0.0 Microsoft.PowerShell.Management
Cmdlet Get-Content 3.1.0.0 Microsoft.PowerShell.Management
Cmdlet Set-Content 3.1.0.0 Microsoft.PowerShell.Management
可以看到,
Get-Command
命令支持分别提供动词和名词部分。如果想将整个命令作为一个整体传递,则需要使用
Name
参数来指定命令的完整名称,如代码清单1-6所示。
代码清单1-6
通过名称查找
Get-Content
cmdlet
PS> Get-Command -Name Get-Content
CommandType Name Version Source
----------- ---- ------- ------
Cmdlet Get-Content 3.1.0.0 Microsoft.PowerShell.Management
前文说过,PowerShell中的很多命令有定制行为的参数。可以通过PowerShell完善的帮助系统来学习参数的用法。