次の方法で共有


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

このセクションでは、エイリアス、ワイルドカード展開、ヘルプ メッセージを 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 では、System.Management.Automation.AliasAttribute 属性を使用してパラメーター エイリアスをサポートしています。この属性では、宣言構文 [Alias()]を使用します。

次のコードは、エイリアスを 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で始まる唯一のパラメーターである場合、ユーザーは FilenameFilenamFileFi、または F を入力し、FileName パラメーターとしてエントリを認識できます。

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

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.Cmdlet.ProcessRecord されます。 システムを変更する場合、コマンドレットは System.Management.Automation.Cmdlet.ShouldProcess を呼び出し、System.Management.Automation.Cmdlet.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 を起動し、Stop-Proc を使用して、Name パラメーターの ProcessName エイリアスを使用してプロセスを停止します。

    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
    

こちらもご覧ください