3.4 使用帮助找命令
从技术上来说,帮助系统不知道Shell中存在哪些命令。它只知道有哪些可用的帮助主题。某些命令可能并没有帮助文档,这会导致帮助系统不能确认这个命令是否存在。幸好微软几乎每个发布的Cmdlet都包含一个帮助主题,这意味着你通常不会发现不同。另外,帮助系统也包含了除特定Cmdlet之外的其他信息,包括背景概念和其他基础信息。
跟大多数命令一样,Get-Help(等同于Help)有几个参数。其中一个最为重要的参数是-Name。这个参数指定你想要访问帮助的主题名称,并且它是一个定位参数,所以你不用必须输入-Name,可以只提供需要查看命令的名称。它也支持通配符,这让帮助系统更加容易找到命令。
例如,你想操作系统事件日志,但是你却不知道使用什么命令,你决定搜索帮助主题包含的事件日志,可以运行下面两个命令中的任何一个。
Help log
Help event
第一个命令在你的计算机返回如下列表:
Name Category Module
---- -------- ------
Clear-EventLog Cmdlet Microsoft.PowerShell.M...
Get-EventLog Cmdlet Microsoft.PowerShell.M...
Limit-EventLog Cmdlet Microsoft.PowerShell.M...
New-EventLog Cmdlet Microsoft.PowerShell.M...
Remove-EventLog Cmdlet Microsoft.PowerShell.M...
Show-EventLog Cmdlet Microsoft.PowerShell.M...
Write-EventLog Cmdlet Microsoft.PowerShell.M...
Get-AppxLog Function Appx
Get-DtcLog Function MsDtc
Reset-DtcLog Function MsDtc
Set-DtcLog Function MsDtc
Get-LogProperties Function PSDiagnostics
Set-LogProperties Function PSDiagnostics
about_Eventlogs HelpFile
about_Logical_Operators HelpFile
注意:
你可以注意到,前面的这个列表的Appx、MsDtc模块包含命令(和函数)等。即使你还没有加载这些模块扩展到内存,帮助系统也一样会显示所有模块。这可以帮助你发现电脑上被遗漏的命令。它可以发现那些安装在适当位置所有扩展中的命令。对此,我们会在第7章进行讨论。
前面的列表中有许多关于事件日志的函数,它们都基于“动词-名词”这个命名格式,但是最后出现了两个关于帮助主题的特殊Cmdlets命令。这两个“about”主题提供了关于某个命令的背景信息。最后一个看起来跟事件日志没有什么关系,但是它被搜索到是因为其中有一个单词“logical”的其中一部分包含了“log”。只要有可能,我们尽量使用“event”或者“log”来搜索,而不是使用“eventlog”,因为我们可以返回尽可能多的结果。
一旦发现从名称看起来可能是你所需的Cmdlet时(比如说,后面示例中Get-EventLog看起来就是做这件事的),你就可以查看该Cmdlet的帮助文档进行确认。
Help Get-EventLog
不要忘记使用Tab键来补全命令!它可以让你只输入部分命令名,按下Tab键,接着Shell会完成与你刚刚输入最为接近匹配的命令。你可以连续按Tab键来选择其他匹配的命令。
动手实验:输入Help Get-Ev,接着按下Tab键。第一次匹配到的是Get-Event,这并不是你想要的;再次按下Tab键就匹配到Get-EventLog,这就是你想要的命令。你可以敲回车键来确认这个命令并显示这个命令对应的帮助信息。如果你使用ISE,你不需要敲Tab键。所有匹配的命令都会以列表的形式呈现,你可以选择其中一个并敲回车键,这样就完成了命令的输入。
你也可以使用最为重要的“*”通配符,它可以在Help后面占用零个或多个字符。如果PowerShell只找到一个匹配你输入的命令,它并不是以列表的形式返回这个单一项,而是直接显示这一单项的具体帮助内容。
动手实验:运行Help Get-EventL*命令,你应该可以看到关于Get-EventLog的帮助信息,而不是返回一个匹配的帮助主题列表。
如果你一直跟随本书的示例进行实验,那么现在你就应该在看Get-Eventlog的帮助文档了。这个文档被称为概要帮助,这意味着它只有简单的命令描述和语法提示。这些信息是非常有用的,当你需要快速认识一个命令的使用,并且我们通过这个帮助文档来进行示例讲解。
补充说明
有些时候,我们想分享的信息虽然不错,但不是至关重要的Shell知识。我们将把这些信息放到“超越自我”部分,正如现在这个部分。如果你跳过这段,你并没有什么损失,但是如果你阅读了,你通常会学会以另外一种方式来解决问题,或者得到额外深入理解PowerShell的机会。
我们前面提到过Help命令并不是为了搜索Cmdlet命令,而是为了搜索帮助主题。因为每个Cmdlet都有一个帮助文件,我们可以说,这些搜索是检索相同的结果集。但是你也可以直接使用Get-Command命令来搜索Cmdlet命令(或者它的别名Gcm)。
跟Help这个命令一样,Get-Command接受通配符,意味着你可以运行Gcm event 来查看所有名称包含“event”的命令。不管怎么样,这个返回的列表将包含不止Cmdlet命令,还会包含一些不一定有用的外部命令,如netevent.dll。
一个比较好的方式是使用“-名词”或者“-动词”参数。因为只有Cmdlet名的名称有名词和动词,返回的结果将会限制为Cmdlet命令。Get-Command -noun event将会返回一个关于事件命令的列表;Get-Command-verb Get将会返回一个具有检索能力的列表。你也可以使用-CommandType参数来指定命令的类型。比如,Get-Command log -type Cmdlet将会返回一个所有命令名称包含“log”的命令列表,并且这个列表不会包括任何其他扩展应用程序或者扩展命令。