エイリアス、ワイルドカード展開、ヘルプをコマンドレット パラメーターに追加する

このセクションでは、コマンドレットのパラメーター Stop-Proc にエイリアス、ワイルドカード展開、ヘルプ メッセージを追加する方法について説明します ( 「システムを変更するコマンドレットの作成」で説明します)。

このコマンドレットは Stop-Proc 、コマンドレットを使用して取得されたプロセスの停止を Get-Proc 試みます ( 「最初のコマンドレットの作成」で説明されています)。

コマンドレットの定義

コマンドレットの作成の最初の手順は、常にコマンドレットに名前を付け、コマンドレットを実装する .NET クラスを宣言することです。 システムを変更するコマンドレットを作成しているため、それに応じて名前を付ける必要があります。 このコマンドレットはシステム プロセスを停止するため、System.Management.Automation.Verbslifecycle クラスによって定義された動詞 Stop と名詞 Proc を 使用してプロセスを示します。 承認されたコマンドレット動詞の詳細については、「 コマンドレット動詞の名前」を参照してください。

次のコードは、この Stop-Proc コマンドレットのクラス定義です。

[Cmdlet(VerbsLifecycle.Stop, "proc",
        SupportsShouldProcess = true)]
public class StopProcCommand : Cmdlet

システム変更のパラメーターの定義

コマンドレットでは、システムの変更とユーザー フィードバックをサポートするパラメーターを定義する必要があります。 コマンドレットは、ある種の識別子によってシステムを変更できるように、 Name パラメーターまたは同等のパラメーターを定義する必要があります。 さらに、コマンドレットは Force パラメーターと PassThru パラメーターを定義する必要があります。 これらのパラメーターの詳細については、「 システムを変更するコマンドレットの作成」を参照してください。

パラメーターエイリアスの定義

パラメーターエイリアスには、コマンドレット パラメーターの別名または明確に定義された 1 文字または 2 文字の短い名前を指定できます。 どちらの場合も、エイリアスを使用する目的は、コマンド ラインからのユーザー 入力を簡略化することです。 Windows PowerShellは、宣言構文[Alias()]を使用する System.Management.Automation.Aliasattribute 属性を使用してパラメーターエイリアスをサポートします。

次のコードは、 Name パラメーターにエイリアスを追加する方法を示しています。

/// <summary>
/// Specify the mandatory Name parameter used to identify the
/// processes to be stopped.
/// </summary>
[Parameter(
           Position = 0,
           Mandatory = true,
           ValueFromPipeline = true,
           ValueFromPipelineByPropertyName = true,
           HelpMessage = "The name of one or more processes to stop. Wildcards are permitted."
)]
[Alias("ProcessName")]
public string[] Name
{
  get { return processNames; }
  set { processNames = value; }
}
private string[] processNames;

System.Management.Automation.Aliasattribute 属性を使用するだけでなく、エイリアスが指定されていない場合でも、Windows PowerShell ランタイムは部分的な名前の照合を実行します。 たとえば、コマンドレットに FileName パラメーターがあり、それが最初に始まるF唯一のパラメーターである場合、ユーザーはエントリを FileName パラメーターとして入力Filename``Filenam、、File``FiまたはF認識できます。

パラメーターのヘルプの作成

Windows PowerShellを使用すると、コマンドレット パラメーターのヘルプを作成できます。 これは、システムの変更とユーザーフィードバックに使用される任意のパラメーターに対して行います。 ヘルプをサポートする各パラメーターについて、System.Management.Automation.Parameterattribute 属性宣言で HelpMessage 属性キーワードを設定できます。 このキーワードは、パラメーターの使用を支援するためにユーザーに表示するテキストを定義します。 HelpMessageBaseName キーワードを設定して、メッセージに使用するリソースのベース名を識別することもできます。 このキーワードを設定する場合は、リソース識別子を指定するために HelpMessageResourceId キーワードも設定する必要があります。

このStop-Procコマンドレットの次のコードでは、Name パラメーターの HelpMessage 属性キーワードを定義します。

/// <summary>
/// Specify the mandatory Name parameter used to identify the
/// processes to be stopped.
/// </summary>
[Parameter(
           Position = 0,
           Mandatory = true,
           ValueFromPipeline = true,
           ValueFromPipelineByPropertyName = true,
           HelpMessage = "The name of one or more processes to stop. Wildcards are permitted."
)]

入力処理メソッドのオーバーライド

コマンドレットは入力処理メソッドをオーバーライドする必要があります。ほとんどの場合、これは System.Management.Automation.コマンドレット.ProcessRecord になります。 システムを変更する場合、このコマンドレットは System.Management.Automation.Cmdlet.ShouldProcess メソッドと System.Management.Automation.コマンドレット.ShouldContinue メソッドを呼び出して、ユーザーが変更前にフィードバックを提供できるようにします。 これらのメソッドの詳細については、「 システムを変更するコマンドレットの作成」を参照してください。

ワイルドカード展開のサポート

複数のオブジェクトを選択できるように、コマンドレットは System.Management.Automation.WildcardPattern クラスと System.Management.Automation.WildcardOptions クラスを使用して、パラメーター入力のワイルドカード拡張サポートを提供できます。 ワイルドカード パターンの例は lsa*、、 *.txtです [a-c]*。 パターンにリテラルで使用する必要がある文字が含まれている場合は、エスケープ文字としてバッククォート文字 (`) を使用します。

ファイル名とパス名のワイルドカード展開は、コマンドレットが複数のオブジェクトの選択が必要な場合にパス入力のサポートを許可する一般的なシナリオの例です。 一般的なケースは、ユーザーが現在のフォルダーに存在するすべてのファイルを表示するファイル システムです。

カスタマイズされたワイルドカード パターン マッチングの実装が必要なのはまれです。 この場合、コマンドレットは、完全な POSIX 1003.2、ワイルドカード拡張用の 3.13 仕様、または次の簡略化されたサブセットのいずれかをサポートする必要があります。

  • 疑問符 (?)。 指定した場所の任意の文字と一致します。
  • アスタリスク (*)。 指定した位置から始まる 0 個以上の文字と一致します。
  • 角かっこ ([) を開きます。 文字または文字の範囲を含めることができるパターン 角かっこ式を導入します。 範囲が必要な場合は、ハイフン (-) を使用して範囲を示します。
  • 角かっこ (]) を閉じます。 パターン かっこ式を終了します。
  • バッククォートエスケープ文字 (`)。 次の文字をリテラルで取得する必要があることを示します。 (プログラムで指定するのではなく) コマンド ラインからバッククォート文字を指定する場合は、バッククォートエスケープ文字を 2 回指定する必要があることに注意してください。

注意

ワイルドカード パターンの詳細については、「 コマンドレット パラメーターでのワイルドカードのサポート」を参照してください。

次のコードは、ワイルドカード オプションを設定し、このコマンドレットの Name パラメーターを解決するために使用されるワイルドカード パターンを定義する方法を示しています。

WildcardOptions options = WildcardOptions.IgnoreCase |
                          WildcardOptions.Compiled;
WildcardPattern wildcard = new WildcardPattern(name,options);

次のコードは、プロセス名が定義されたワイルドカード パターンと一致するかどうかをテストする方法を示しています。 この場合、プロセス名がパターンと一致しない場合、コマンドレットは引き続き次のプロセス名を取得します。

if (!wildcard.IsMatch(processName))
{
  continue;
}

コード サンプル

完全な C# サンプル コードについては、 StopProcessSample03 サンプルを参照してください。

オブジェクトの種類と書式を定義する

Windows PowerShell.Net オブジェクトを使用してコマンドレット間で情報を渡します。 その結果、コマンドレットで独自の型を定義する必要がある場合や、コマンドレットが別のコマンドレットによって提供される既存の型を拡張する必要がある場合があります。 新しい型の定義または既存の型の拡張の詳細については、「 オブジェクト型と書式の拡張」を参照してください。

コマンドレットのビルド

コマンドレットを実装した後は、Windows PowerShell スナップインを使用してWindows PowerShellに登録する必要があります。 コマンドレットの登録の詳細については、「 コマンドレット、プロバイダー、およびホスト アプリケーションを登録する方法」を参照してください。

コマンドレットのテスト

コマンドレットが Windows PowerShell に登録されたら、コマンド ラインで実行してテストできます。 コマンドレットのサンプルStop-Procテストしてみましょう。 コマンド ラインからコマンドレットを使用する方法の詳細については、Windows PowerShellのはじめにを参照してください。

  • Windows PowerShellを開始し、Name パラメーターの ProcessName エイリアスを使用してプロセスを停止するために使用Stop-Procします。

    PS> Stop-Proc -ProcessName notepad
    

    次のような出力が表示されます。

    Confirm
    Are you sure you want to perform this action?
    Performing operation "Stop-Proc" on Target "notepad (3496)".
    [Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"): Y
    
  • コマンド ラインで次のエントリを作成します。 Name パラメーターは必須であるため、入力を求められます。 入力すると、 !? パラメーターに関連付けられているヘルプ テキストが表示されます。

    PS> Stop-Proc
    

    次のような出力が表示されます。

    Cmdlet Stop-Proc at command pipeline position 1
    Supply values for the following parameters:
    (Type !? for Help.)
    Name[0]: !?
    The name of one or more processes to stop. Wildcards are permitted.
    Name[0]: notepad
    
  • 次に、次のエントリを作成して、ワイルドカード パターン *note*に一致するすべてのプロセスを停止します。 パターンに一致する各プロセスを停止する前に、メッセージが表示されます。

    PS> Stop-Proc -Name *note*
    

    次のような出力が表示されます。

    Confirm
    Are you sure you want to perform this action?
    Performing operation "Stop-Proc" on Target "notepad (1112)".
    [Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"): Y
    

    次のような出力が表示されます。

    Confirm
    Are you sure you want to perform this action?
    Performing operation "Stop-Proc" on Target "ONENOTEM (3712)".
    [Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"): N
    

    次のような出力が表示されます。

    Confirm
    Are you sure you want to perform this action?
    Performing operation "Stop-Proc" on Target "ONENOTE (3592)".
    [Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"): N
    

参照