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 トピックで説明されています。

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

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

こちらもご覧ください