次の方法で共有


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

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

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

関連項目