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 メソッドと同じです。 このブロックは、 ブロックと ブロックとend
共begin
に、about_Functions_Advanced_Methodsトピックで説明されています。
高度な関数は、次の方法でコンパイルされたコマンドレットとは異なります。
- 文字列の配列が ブール 型パラメーターにバインドされている場合、高度な関数パラメーター バインドは例外をスローしません。
- 属性と 属性は
ValidateSet
ValidatePattern
、名前付きパラメーターを渡すことができません。 - 高度な関数はトランザクションでは使用できません。