about_Functions_Advanced

適用対象: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0

トピック

about_Functions_Advanced

簡単な説明

コマンドレットのように動作する高度な関数について説明します。

詳細な説明

高度な関数を使用すると、コマンドレットで実行できる操作に似た操作を実行する関数を作成できます。高度な関数は、Microsoft .NET Framework 言語でコンパイルされたコマンドレットを作成することなく、関数を迅速に作成したい場合に便利です。これらの高度な関数は、コンパイルされたコマンドレットの機能を制限する場合や、コンパイルされたコマンドレットに似た機能の関数を作成する場合にも便利です。

コンパイルされたコマンドレットの作成と高度な関数の作成には違いがあります。コンパイルされたコマンドレットは、C# などの .NET Framework 言語で作成する必要がある .NET Framework クラスです。一方、高度な関数は、Windows PowerShell® のスクリプト言語で、他の関数またはスクリプト ブロックの作成と同じ方法で作成されます。

高度な関数は CmdletBinding 属性を使用して、自身をコマンドレットと同様に動作する関数として識別します。CmdletBinding 属性は、コンパイルされたコマンドレットのクラスで、クラスをコマンドレットと識別するのに使用される Cmdlet 属性に似ています。この属性の詳細については、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 属性は、名前付きパラメーターを渡すことができません。

- 高度な関数はトランザクションでは使用できません。

関連項目

about_Functions

about_Functions_Advanced_Methods

about_Functions_Advanced_Parameters

about_Functions_CmdletBindingAttribute

about_Functions_OutputTypeAttribute

Windows PowerShell コマンドレット (https://go.microsoft.com/fwlink/?LinkID=135279)