次の方法で共有


about_Functions_Advanced

簡単な説明

スクリプトを使用してコマンドレットを作成する方法である高度な関数について説明します。

長い説明

コマンドレットは、PowerShell のパイプライン セマンティクスに参加する 1 つのコマンドです。 これには、バイナリ コマンドレット、高度なスクリプト関数、CDXML、およびワークフローが含まれます。

高度な関数を使用すると、PowerShell 関数として記述されたコマンドレットを作成できます。 高度な関数を使用すると、バイナリ コマンドレットを記述してコンパイルしなくても、コマンドレットを簡単に作成できます。 バイナリ コマンドレットは、C# などの .NET 言語で記述された .NET クラスです。

高度な関数では、 属性を CmdletBinding 使用して、コマンドレットのように動作する関数として識別します。 属性は CmdletBinding 、コマンドレットとしてクラスを識別するためにコンパイルされたコマンドレット クラスで使用されるコマンドレット属性に似ています。 この属性の詳細については、「 about_Functions_CmdletBindingAttribute」を参照してください。

次の例は、名前を受け入れ、指定された名前を使用してあいさつ文を出力する関数を示しています。 また、この関数は、コンパイルされたコマンドレットの動詞と名詞のペアのように、動詞 (Send) と名詞 (Greeting) のペアを含む名前を定義します。 ただし、動詞名詞名を持つ関数は必要ありません。

function Send-Greeting
{
    [CmdletBinding()]
    Param(
        [Parameter(Mandatory=$true)]
        [string] $Name
    )

    Process
    {
        Write-Host ("Hello " + $Name + "!")
    }
}

関数のパラメーターは、Parameter 属性を使用して宣言されます。 この属性は単独で使用することも、Alias 属性や他のいくつかのパラメーター検証属性と組み合わせて使用することもできます。 パラメーター (実行時に追加される動的パラメーターを含む) を宣言する方法の詳細については、「 about_Functions_Advanced_Parameters」を参照してください。

前の関数の実際の作業は Process ブロックで実行されます。これは、コマンドレットに渡されるデータを処理するためにコンパイルされたコマンドレットで使用される ProcessingRecord メソッドと同じです。 このブロックと Begin ブロックと End ブロックについては、 about_Functions_Advanced_Methods トピックで説明されています。

高度な関数は、次の方法でコンパイルされたコマンドレットとは異なります。

  • 文字列の配列がブール型パラメーターにバインドされている場合、高度な関数パラメーター バインドは例外をスローしません。
  • ValidateSet 属性と ValidatePattern 属性は、名前付きパラメーターを渡すことができません。
  • トランザクションでは高度な関数を使用できません。

こちらもご覧ください