大半のコマンドライン インターフェイスに共通して言えることは、コマンドやコマンド パラメーターの名前を覚えるために多大な時間と労力が必要であるという点です。この問題の原因は、決まったパターンがほとんどなく、よく使用するコマンドやパラメーターを暗記する以外に覚える方法がないことです。

新しいコマンドやパラメーターを使用する場合、それまでの知識はあまり役に立たないのが一般的です。新しい名前をその都度探し、覚える必要があります。個々のインターフェイスが、少数のツールの集まりからしだいに機能を増やして発展していった経緯を考えれば、その体系に一貫性が欠けている理由は明らかです。各コマンドはそれぞれが独立したツールなので、コマンド名に関してはこのような状況も当然であるように思いがちですが、コマンド名の扱いにはより優れた方法があります。

ほとんどのコマンドは、サービスやプロセスなど、オペレーティング システムまたはアプリケーションの各種要素を管理する目的で作成されています。コマンド名は多岐に及び、同じ系統のコマンド (コマンド ファミリ) だからといって、必ずしも決まったパターンがあるわけではありません。たとえば、Windows システムでは、net start コマンドと net stop コマンドを使用して、サービスを開始したり停止したりできます。Windows には、より汎用的なサービス制御ツールとして、sc というコマンドがありますが、同じサービス コマンドである net コマンドとはまったく異なる命名規則が使われています。プロセス管理用のコマンドはどうでしょうか。Windows には、プロセスを一覧表示するための tasklist コマンドや、プロセスを強制終了するための taskkill コマンドが存在します。

コマンドに対するパラメーターの指定方法にもばらつきがあります。net start コマンドでは、リモート コンピューター上のサービスを開始することはできません。これに対し、sc コマンドは、リモート コンピューター上のサービスを開始することはできますが、指定するリモート コンピューター名の前にバックスラッシュを 2 つ入力する必要があります。たとえば、DC01 というリモート コンピューター上のスプーラー サービスを開始するには、「sc \\DC01 start spooler」のように入力します。DC01 上で実行されているタスクを一覧表示するには、「tasklist /S DC01」のように、/S パラメーター ("System" の S) の後に DC01 を指定します。このとき、コンピューター名の前にバックスラッシュは指定しません。

技術的に見れば、サービスとプロセスとの間には大きな違いがあります。しかし、どちらもコンピューター上の管理対象の要素であり、また、明確な有効期間が存在するという点では共通しています。サービスとプロセスはどちらも開始および停止でき、実行中のサービスとプロセスはどちらも一覧表示することができます。つまり、サービスとプロセスはまったく異なるものですが、ユーザーがサービスやプロセスに対して実行する操作は、概念的に同じである場合も多いということです。また、パラメーターを指定することによって動作をカスタマイズするときの選択肢も概念的には似ていることがあります。

Windows PowerShell ではこうした類似性を活かして、コマンドレットの意味を理解して使用するために必要な名前の数を減らしました。

コマンドレットには覚えやすいように "動詞-名詞" 形式の命名規則が使用される

Windows PowerShell には "動詞-名詞" 形式の命名規則が使用され、各コマンドレットの名前は、標準的な動詞と特定の名詞をハイフンでつないで表記されます。ここでいう動詞は必ずしも文法的な動詞とは合致しませんが、Windows PowerShell における特定の動作を表しています。名詞については、ほぼ文法上の名詞と同じと考えてかまいません。システムを管理する上で重要な、特定の種類のオブジェクトを表します。実際、名前を動詞と名詞に分けることにより、格段に覚えやすくなります。そのことは、動詞と名詞の例をいくつか考えてみればすぐ理解できます。

名詞は、それだけで目的を特定することは難しいですが、常にコマンドの実行対象を表します。Windows PowerShell には、Get-ProcessStop-ProcessGet-ServiceStop-Service などのコマンドがあります。

2 つの名詞と 2 つの動詞だけでは、記憶しやすさに一貫性がどれだけ役立つかを実感することは難しいことです。しかし、動詞と名詞がそれぞれ 10 個ずつ存在すると仮定してみてください。覚える単語は 20 個のみですが、それらを組み合わせると 100 種類ものコマンド名を作成できます。

コマンド名を見ただけでそのコマンドの目的がわかることも珍しくありません。また、新しいコマンドに名前を付ける場合も、その規則は明確です。たとえば、コンピューターをシャットダウンするためのコマンドであれば、Stop-Computer のように命名します。ネットワーク上のすべてのコンピューターを一覧表示するコマンドであれば、Get-Computer になります。システム日付を取得するコマンドは Get-Date です。

Get-Command-Verb パラメーターを指定すると、特定の動詞を含むすべてのコマンドを一覧表示できます (Get-Command については次のセクションで詳しく説明します)。たとえば、Get という動詞が使用されたすべてのコマンドレットを表示するには、次のように入力します。

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... 
...

動詞-名詞形式の命名規則が用いられているからといって、必ずしもコマンドレットであるとは限りません。Windows PowerShell のネイティブ コマンドのうち、コマンドレットではないにもかかわらず、動詞-名詞形式の名前が付いているものもあります。たとえば、コンソール ウィンドウをクリアするためのコマンドである Clear-Host がその例です。Clear-Host コマンドは実際には内部関数です。そのことは、Get-Command で調べるとすぐにわかります。

PS> Get-Command -Name Clear-Host

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

コマンドレットでは標準的なパラメーターが使用される

前述のように、従来のコマンドライン インターフェイスで使用されるコマンドには、通常、パラメーター名の一貫性がありません。名前そのものが存在しないパラメーターもあります。仮に名前があったとしても、1 文字または略称で表記されることが多く、すばやく入力できるという利点はありますが、未経験のユーザーには決してわかりすいものではありません。

従来のほとんどのコマンドライン インターフェイスとは異なり、Windows PowerShell では、パラメーターが直接処理されます。パラメーター名の標準化は、開発者に一定の命名規則を推奨すると共に、このように、パラメーターに直接アクセスすることによって実現されます。このことによって、すべてのコマンドレットが、常に標準に準拠することが保証されるわけではありません。しかし、パラメーター名の標準化を促す効果はあります。

注意事項:

パラメーター名を使用する場合は、それがパラメーターであることを Windows PowerShell に明確に伝えるために、パラメーター名の前には必ず '-' を付けます。前述の Get-Command -Name Clear-Host の例を見ると、パラメーターの名前は Name ですが、実際には「-Name」と入力されていることがわかります。

以降、標準的なパラメーター名と使用法について、一般的な特徴をいくつか取り上げます。

ヘルプ パラメーター (?)

すべてのコマンドレットに共通することですが、-? パラメーターを指定した場合、コマンドレット自体が実行されるのではなく、対応するコマンドレットのヘルプが Windows PowerShell によって表示されます。

共通パラメーター

Windows PowerShell には、共通パラメーターと呼ばれるパラメーターがいくつか存在します。コマンドレットに実装された共通パラメーターは Windows PowerShell エンジンによって制御されるため、常に一貫した動作が実現されます。共通パラメーターには、WhatIfConfirmVerboseDebugWarnErrorActionErrorVariableOutVariableOutBuffer などがあります。

推奨パラメーター名

Windows PowerShell のコア コマンドレットでは、パラメーター名の一貫性が配慮されています。強制的なものではありませんが、標準化の観点から、パラメーター名には一定の命名規則が推奨されています。

たとえば、コンピューター名を指定するためのパラメーターの名前には、Server、Host、System、Node などではなく、ComputerName を使用することが推奨されています。推奨されているパラメーター名には、ForceExcludeIncludePassThruPathCaseSensitive などがあります。




目次