使用大多数命令行界面时,了解命令名称及命令参数需要花费大量的时间。问题在于可用模式很少,因此只能通过记住常用的每种命令和每个参数来了解这些命令行界面。

使用新命令或参数时,您通常无法使用已知的名称,而必须查找和了解新的名称。考虑到界面是如何从一个小工具集经过不断添加的新增功能发展而来,就很容易了解为何其结构会是非标准的。尤其是使用命令名称时,这一点可能是必然的,因为每种命令都是单独的工具。不过,也可以通过更好的方式来处理命令名称。

大多数命令都是为管理操作系统或应用程序的元素(例如,服务或进程)构建的。这些命令具有各种名称,它们可能属于或不属于一个系列。例如,在 Windows 系统上可以使用 net startnet stop 命令来启动和停止服务。此外,还有一个名为 sc 的更通用的 Windows 服务控制工具,这一完全不同的名称与 net 服务命令的命名模式不一致。对于进程管理,Windows 使用 tasklist 命令来列出进程,并使用 taskkill 命令来终止进程。

用于接受参数的命令具有不一致的参数规范。不能使用 net start 命令来启动远程计算机上的服务。sc 命令将启动远程计算机上的服务,但是,若要指定远程计算机,则必须在其名称前添加双反斜杠作为前缀。例如,若要在名为 DC01 的远程计算机上启动后台打印程序服务,您可以键入 sc \\DC01 start spooler。若要列出在 DC01 上运行的任务,需要使用 /S(代表“system”)参数,并提供如下所示的不带反斜杠的名称 DC01:tasklist /S DC01

尽管服务与进程之间有很大的技术差别,但它们都是计算机上具有定义完整的生命周期的可管理元素示例。您可能需要启动或停止服务或进程,或获得所有当前正在运行的服务或进程的列表。换而言之,尽管服务和进程并不相同,但从概念上来看,对服务或进程执行的操作通常是相同的。此外,从概念上来看,通过指定参数来自定义操作时所做的选择也可能十分类似。

Windows PowerShell 利用这些相似性来减少要了解和使用 cmdlet 所需知道的不同名称数。

Cmdlet 使用“动词-名词”名称以减少命令记忆量

Windows PowerShell 使用“动词-名词”命名系统,其中的每个 cmdlet 名称均由标准动词、连字符和特定名词组成。Windows PowerShell 动词并非一定为英语动词,但其表示 Windows PowerShell 中的特定操作。名词与所有语言中的名词十分类似,它们描述在系统管理中起重要作用的特定对象类型。我们将提供几个动词和名词的示例,以便于向您演示这些由两部分组成的名称是如何减少您了解命令所需的记忆量。

名词所受的限制较少,但它们应始终描述命令的操作对象。Windows PowerShell 具有 Get-ProcessStop-ProcessGet-ServiceStop-Service 等命令。

如果仅有两个名词和两个动词,则一致性并不会极大地简化您了解这些命令的过程。但是,假定是由 10 个动词和 10 个名词组成的一组标准命令名称,则您只需记住 20 个单词,而使用这些单词可以构成 100 个不同的命令名称。

通常,您只需通过命令的名称即可识别其用途,而对新命令应使用什么样的名称,这通常也是显而易见的。例如,计算机关闭命令可能为 Stop-Computer。用于列出网络上的所有计算机的命令可能为 Get-Computer。用于获取系统日期的命令为 Get-Date

Get-Command 中使用 -Verb 参数可以列出所有包含特定动词的命令(我们将在下一节中详细介绍 Get-Command)。例如,若要查看所有使用动词 Get 的 cmdlet,请键入:

PS> Get-Command -Verb Get
CommandType     Name                            Definition
-----------     ----                            ----------
Cmdlet          Get-Acl                         Get-Acl [[-Path] <String[]>]...
Cmdlet          Get-Alias                       Get-Alias [[-Name] <String[]...
Cmdlet          Get-AuthenticodeSignature       Get-AuthenticodeSignature [-...
Cmdlet          Get-ChildItem                   Get-ChildItem [[-Path] <Stri...
...

-Noun 参数用处更大,因为使用该参数可以查看影响同一对象类型的一系列命令。例如,若要显示可用于管理服务的命令,请键入以下命令:

PS> Get-Command -Noun Service
CommandType     Name                            Definition
-----------     ----                            ----------
Cmdlet          Get-Service                     Get-Service [[-Name] <String...
Cmdlet          New-Service                     New-Service [-Name] <String>...
Cmdlet          Restart-Service                 Restart-Service [-Name] <Str...
Cmdlet          Resume-Service                  Resume-Service [-Name] <Stri...
Cmdlet          Set-Service                     Set-Service [-Name] <String>...
Cmdlet          Start-Service                   Start-Service [-Name] <Strin...
Cmdlet          Stop-Service                    Stop-Service [-Name] <String...
Cmdlet          Suspend-Service                 Suspend-Service [-Name] <Str... 
...

如果命令具有“动词-名词”命名方案,并不意味着该命令一定为 cmdlet。有关具有“动词-名词”名称但不是 cmdlet 的命令,一个示例就是本机 Windows PowerShell 命令 Clear-Host,该命令用于清除控制台窗口。Clear-Host 命令实际上是一个内部函数,如果对其运行 Get-Command 您将会发现这一点:

PS> Get-Command -Name Clear-Host

CommandType     Name                            Definition
-----------     ----                            ----------
Function        Clear-Host                      $spaceType = [System.Managem...

Cmdlet 使用标准参数

正如上文所述,传统命令行界面中所使用的命令通常不具有一致的参数名称。有时,参数甚至没有名称。在这种情况下,这些参数通常为可迅速键入的单个字符或缩写单词,但其不易于新用户理解。

与大多数其他传统命令行界面不同,Windows PowerShell 直接处理参数,并利用对参数的这种直接访问以及开发人员的指导来实现参数名称的标准化。尽管这不保证每个 cmdlet 都始终遵从命名标准,但其鼓励这样做。

注意:

使用参数时,参数名称前始终具有“-”符号,以便 Windows PowerShell 能够清楚地将其识别为参数。在 Get-Command -Name Clear-Host 示例中,参数的名称为 Name,但输入时应为 -Name

下面介绍了标准参数名称和用法的一些常见特征。

帮助参数 (?)

对任何 cmdlet 指定 -? 参数时,将不执行该 cmdlet。而 Windows PowerShell 将显示该 cmdlet 的帮助。

通用参数

Windows PowerShell 的一些参数称为通用参数。由于这些参数是由 Windows PowerShell 引擎进行控制,因此每次 cmdlet 实现这些参数时,它们的行为方式将始终相同。通用参数包括 WhatIfConfirmVerboseDebugWarnErrorActionErrorVariableOutVariableOutBuffer

建议参数

Windows PowerShell 核心 cmdlet 对类似参数使用标准名称。尽管参数名称的使用不是强制的,但存在明确的用法指南以鼓励标准化。

例如,该指南建议在对引用计算机的参数进行命名时采用 ComputerName 之类的名称,而不采用 Server、Host、System、Node 或其他常见的备选单词。这些重要的建议参数名称包括 ForceExcludeIncludePassThruPathCaseSensitive




目录