學習命令列介面通常都需要投入大量時間認識命令的名稱和命令參數。但問題在於大多數的命名方式均毫無章法,所以學習的不二法門是記住每個常用的命令和參數。

當您碰到新的命令或參數時,通常無法逕行應用原有的知識;您總得探索學習新名稱。介面若是從少許工具組逐漸附加功能而增長,您就更能深刻感受到其結構沒有一定的標準。尤其命令名稱更是如此,因為每個命令都是個別的工具,但其實應有更好的方法管理命令名稱。

大部分命令建立的用意均為管理作業系統或應用程式的元素,像是服務或處理序。命令的名稱式樣繁多而未必可歸納為同一系列。以 Windows 系統為例,您可以使用 net startnet stop 命令來啟動和停止服務。Windows 還有另一個更通用的服務控制工具使用截然不同的名稱 sc,其命名模式並不適合歸納為 net 服務命令。針對處理序管理,Windows 則提供 tasklist 命令用於顯示處理序清單,並提供 taskkill 命令用於結束處理序。

接受參數的命令有著不規則的參數規格。您無法使用 net start 命令啟動遠端電腦上的服務。使用 sc 命令則可啟動遠端電腦上的服務,但指定遠端電腦時必須在其名稱前面加上雙反斜線。例如,若要啟動 DC01 這部遠端電腦上的多工緩衝處理器服務,就應輸入 sc \\DC01 start spooler。若要列出 DC01 上執行的工作,則需使用 /S (代表「系統」) 參數並提供名稱 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,只是同樣採用「動詞-名詞」命名配置而已。例如,Windows PowerShell 用於清除主控台視窗的原生命令 Clear-Host 也有「動詞-名詞」名稱卻不是 Cmdlet。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 有一些參數稱為「一般參數」(Common Parameter)。這些參數是由 Windows PowerShell 引擎所控制,不會因為實作的 Cmdlet 不同而有不同的行為模式。一般參數包括:WhatIfConfirmVerboseDebug, WarnErrorActionErrorVariableOutVariableOutBuffer

建議參數

Windows PowerShell 核心 Cmdlet 對類似的參數使用標準名稱。雖然參數名稱的使用沒有強制性,卻有明確的用法指南以利促進標準化。

例如,該指南建議將參照電腦名稱的參數命名為 ComputerName,而非 Server、Host、System、Node 或其他常用字。重要的建議參數名稱包括 ForceExcludeIncludePassThruPathCaseSensitive




目錄