PowerShell コマンド名の学習Learning PowerShell command names

大半のコマンドライン インターフェイスに共通して言えることは、コマンドやパラメーターの名前を覚えるために多大な時間と労力が必要であるという点です。Learning names of commands and parameters requires a significant time investment with most command-line interfaces. 問題は、パターン化されているものが少ししかないことです。The issue is that there are few patterns. 定期的に使う必要があるコマンドとパラメーターを覚えるための唯一の方法は、記憶することです。Memorization is the only way to learn the commands and parameters that you need to use on a regular basis.

新しいコマンドやパラメーターを使用する場合は、必ず既に備えている知識を活用できるわけではありません。When you work with a new command or parameter, you can't always use what you already know. 新しい名前を検索して調べる必要があります。You have to find and learn a new name. 従来は、コマンドライン インターフェイスは小規模なツール セットから始まって、そこに増補していくことで拡張されました。Traditionally, command-line interfaces start with a small set of tools and grow with incremental additions. このことから、標準的な構造が存在しない理由は容易にわかります。It's easy to see why there's no standard structure. 各コマンドは別個のツールなので、このことは、コマンド名にとっては理に適っているようです。This seems logical for command names since each command is a separate tool. PowerShell は、コマンド名を扱いやすい方法を備えています。PowerShell has a better way to handle command names.

従来のシェルのコマンド名を覚えるLearning command names in traditional shells

ほとんどのコマンドは、サービスやプロセスなど、オペレーティング システムまたはアプリケーションの各種要素を管理する目的で作成されています。Most commands are built to manage elements of the operating system or applications, such as services or processes. コマンド名は、同じ系統のコマンド (コマンド ファミリ) だからといって、必ずしも決まったパターンがあるわけではありません。The commands have names that may or may not fit into a family. たとえば、Windows システムでは、net start コマンドと net stop コマンドを使用して、サービスを開始したり停止したりできます。For example, on Windows systems, you can use the net start and net stop commands to start and stop a service. Sc.exe は、Windows に対応するもう 1 つのサービス制御ツールです。Sc.exe is another service control tool for Windows. その名前は、net.exe サービス コマンドの命名パターンには準拠していません。That name does not fit into the naming pattern for the net.exe service commands. プロセス管理用のコマンドはどうでしょうか。Windows には、プロセスを一覧表示するための tasklist.exe コマンドや、プロセスを強制終了するための taskkill.exe コマンドが存在します。For process management, Windows has the tasklist.exe command to list processes and the taskkill.exe command to kill processes.

これらのコマンドのパラメーター仕様も不規則です。Also, these commands have irregular parameter specifications. net start コマンドを使用して、リモート コンピューター上でサービスを開始することはできません。You can't use the net start command to start a service on a remote computer. sc.exe コマンドは、リモート コンピューター上でサービスを開始できます。The sc.exe command can start a service on a remote computer. ただし、リモート コンピューターを指定するには、二重のバックスラッシュを名前の前に付与する必要があります。But to specify the remote computer, you must prefix its name with a double backslash. DC01 という名前のリモート コンピューター上でスプーラー サービスを開始するには、sc.exe \\DC01 start spooler と入力します。To start the spooler service on a remote computer named DC01, you type sc.exe \\DC01 start spooler. DC01 で実行されているタスクを一覧表示するには、/S パラメーターとバックスラッシュを付与していないコンピューター名を使用します。To list tasks running on DC01, you use the /S parameter and the computer name without backslashes. たとえば、tasklist /S DC01 のように指定します。For example, tasklist /S DC01.

注意

PowerShell v6 以前では、scSet-Content コマンドレットのエイリアスでした。Prior to PowerShell v6, sc was an alias for the Set-Content cmdlet. そのため、v6 より前のバージョンの PowerShell で sc.exe コマンドを実行するには、ファイル名拡張子 exe を含んだ完全なファイル名 sc.exe を含める必要があります。Therefore, to run the sc.exe command in a version of PowerShell prior to v6, you must include the full filename sc.exe including the file extension exe.

サービスとプロセスは、ライフ サイクルが明確に定義されているコンピューター上で管理できる要素の例です。Services and processes are examples of manageable elements on a computer that have well-defined life cycles. サービスとプロセスを開始または停止したり、現在実行中のサービスやプロセスすべてを一覧表示したりできます。You may start or stop services and processes, or get a list of all currently running services or processes. サービスとプロセスの間には、技術上は重大な区別がありますが、サービスとプロセスで実行されるアクションは、概念的には同じです。Although there are important technical distinctions between them, the actions you perform on services and processes are conceptually the same. また、パラメーターを指定して動作をカスタマイズするときの選択肢も、概念的に似ている場合があります。Furthermore, the choices we make to customize an action by specifying parameters may be conceptually similar as well.

PowerShell ではこの類似性を活かして、コマンドレットを理解して使用するために知っておく必要がある個々の名前の数を減らしました。PowerShell exploits these similarities to reduce the number of distinct names you need to know to understand and use cmdlets.

コマンドレットには覚えやすいように "動詞-名詞" 形式の命名規則が使用されるCmdlets use verb-noun names to reduce command memorization

PowerShell では、「動詞-名詞」の命名体系を採用しています。PowerShell uses a "verb-noun" naming system. 各コマンドレットの名前は、標準的な動詞を特定の名詞とハイフンでつないで表記されます。Each cmdlet name consists of a standard verb hyphenated with a specific noun. PowerShell の動詞は必ずしも文法上の動詞とは一致しませんが、PowerShell における特定の動作を表しています。PowerShell verbs are not always English verbs, but they express specific actions in PowerShell. 名詞については、ほぼ文法上の名詞と同じと考えてかまいません。Nouns are very much like nouns in any language. システムを管理するうえで重要な、特定の種類のオブジェクトを表します。They describe specific types of objects that are important in system administration. 実際、名前を動詞と名詞に分けることにより、格段に覚えやすくなります。そのことは、例をいくつか考えてみればすぐに納得できます。It's easy to demonstrate how these two-part names reduce learning effort by looking at a few examples.

PowerShell には、推奨される標準的な動詞のセットがあります。PowerShell has a recommended set of standard verbs. 名詞に対する制約は少ないですが、常に動詞のアクションの対象を表します。Nouns are less restricted, but always describe what the verb acts upon. PowerShell には、Get-ProcessStop-ProcessGet-Service、および Stop-Service のようなコマンドがあります。PowerShell has commands such as Get-Process, Stop-Process, Get-Service, and Stop-Service.

この名詞と動詞 2 つずつの例では、一貫性のおかげで覚えやすくなるという実感は、それほどありません。For this example of two nouns and verbs, consistency does not simplify learning that much. これを動詞と名詞 10 個 ずつの標準化されたセットに拡大します。Extend that list to a standardized set of 10 verbs and 10 nouns. この場合、覚える単語は 20 個だけですが、Now you only have 20 words to understand. 単語を組み合わせることで、個々のコマンド名として 100 通りが成立します。But those words can be combined to form 100 distinct command names.

名前を読めば、PowerShell コマンドの動作を簡単に理解できます。It's easy to understand what a PowerShell command does by reading its name. コンピューターをシャット ダウンするコマンドは、Stop-Computer です。The command to shut down a computer is Stop-Computer. ネットワーク上にあるすべてのコンピューターを一覧表示するコマンドは、Get-Computer です。The command to list all computers on a network is Get-Computer. システム日付を取得するコマンドは、Get-Date です。The command to get the system date is Get-Date.

Get-CommandVerb パラメーターを使って、特定の動詞を含むすべてのコマンドを一覧表示できます。You can list all commands that include a particular verb with the Verb parameter for Get-Command. たとえば、Get という動詞が使用されているすべてのコマンドレットを表示するには、次のように入力します。For example, to see all cmdlets that use the verb Get, type:

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 パラメーターを使用すると、同じ種類のオブジェクトに影響を及ぼすコマンド ファミリを表示できます。Use the Noun parameter to see a family of commands that affect the same type of object. たとえば、サービスの管理に使用できるコマンドを表示するには、次のコマンドを実行します。For example, run following command to see the commands available for managing services:

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

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

前述のように、従来のコマンドライン インターフェイスで使用されるコマンドには、必ずしもパラメーター名に一貫性はありません。As noted earlier, commands used in traditional command-line interfaces don't always have consistent parameter names. パラメーターは 1 文字または略称で表記されることが多く、簡単に入力できるという利点はありますが、未経験のユーザーには決してわかりすいものではありません。Parameters are often single-character or abbreviated words that are easy to type but aren't easily understood by new users.

従来のほとんどのコマンドライン インターフェイスとは異なり、PowerShell では、パラメーターが直接処理されます。また、パラメーターへのこの直接アクセスは、パラメーター名を標準化する開発者向けのガイドラインに準拠して使用されます。Unlike most other traditional command-line interfaces, PowerShell processes parameters directly, and it uses this direct access to the parameters along with developer guidance to standardize parameter names. このガイドラインは役立ちますが、すべてのコマンドレットが標準に準拠していることを保証するわけではありません。This guidance encourages but does not guarantee that every cmdlet conforms to the standard.

また、PowerShell では、パラメーターの区切り記号も標準化しています。PowerShell also standardizes the parameter separator. PowerShell コマンドでは、パラメーター名の前には常に '-' が付加されます。Parameter names always have a '-' prepended to them with a PowerShell command. 次の例を確認してください。Consider the following example:

Get-Command -Name Clear-Host

パラメーターの名前は Name ですが、コマンド ライン上でパラメーターとして使用される場合は、-Name と入力されています。The parameter's name is Name, but it is typed as -Name when used on the command line as a parameter.

以降、標準的なパラメーター名と使用法について、一般的な特徴をいくつか取り上げます。Here are some of the general characteristics of the standard parameter names and usages.

ヘルプ パラメーター (?)The Help parameter (?)

任意のコマンドレットで -? パラメーターを指定すると、PowerShell によりコマンドレットのヘルプが表示されます。When you specify the -? parameter on any cmdlet, PowerShell displays help for the cmdlet. コマンドレットは実行されません。The cmdlet is not executed.

共通パラメーターCommon parameters

PowerShell には、複数の共通パラメーターがあります。PowerShell has several common parameters. これらのパラメーターは、PowerShell エンジンによって制御されます。These parameters are controlled by the PowerShell engine. 共通パラメーターは、常に同じように動作します。Common parameters always behave the same way. 共通パラメーターには、WhatIfConfirmVerboseDebugWarnErrorActionErrorVariableOutVariableOutBuffer などがあります。The common parameters are WhatIf, Confirm, Verbose, Debug, Warn, ErrorAction, ErrorVariable, OutVariable, and OutBuffer.

PowerShell のコア コマンドレットでは、類似のパラメーターに対して標準名を使用しています。The PowerShell core cmdlets use standard names for similar parameters. これらの標準名の使用は強制ではありませんが、標準化を推進するための明確なガイドラインがあります。The use of these standard names is not enforced, but there is explicit guidance to encourage standardization.

たとえば、コンピューターを参照するパラメーターに推奨される名前は、Server、Host、System、Node や、それ以外の共通の別名ではなく、ComputerName です。For example, the recommended name for a parameter that refers to a computer is ComputerName, rather than Server, Host, System, Node, or some other common alternative. 推奨される他の重要なパラメーター名としては、ForceExcludeIncludePassThruPath、および CaseSensitive があります。Other important recommended parameter names are Force, Exclude, Include, PassThru, Path, and CaseSensitive.