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 メソッドと同じです。 このブロックと and end ブロックbeginについては、about_Functions_Advanced_Methodsトピックで説明します。

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

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

関連項目