次の方法で共有


about_Functions_Advanced

簡単な説明

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

詳細な説明

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

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

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

関数のパラメーターは、param() ステートメントで宣言された変数です。 省略可能な [Parameter()] 属性を単独で使用することも、[Alias()] 属性またはパラメーター検証属性と組み合わせて使用することもできます。 パラメーターを宣言する方法の詳細については、about_Functions_Advanced_Parametersを参照してください。

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

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

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

この関数は、process ブロックで処理を実行します。これは、コンパイルされたコマンドレットで使用される ProcessingRecord メソッドと同じです。 process ブロックとその他の名前付きブロックについては、about_Functions_Advanced_Methodsで説明します。

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

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

関連項目