ja-JP/about_Functions_Advanced.help.txt

TOPIC
    about_Functions_Advanced

簡単な説明
    コンパイル済みのコマンドレットと同じように動作する「高度な関数
    (advanced functions)」の概要を説明します。

詳細な説明
    高度な関数を使うと、C# などでコンパイルしたコマンドレットを書かずに、
    PowerShell の関数だけでコマンドレットと同等の機能を実現できます。
    高度な関数は、共通パラメーター(-Verbose, -ErrorAction など)を
    自動的に利用でき、コマンドレットに近い動作をします。

    関数を高度な関数にするには、次のどちらかを満たします。

      - param ブロックの前に CmdletBinding 属性を付ける
      - いずれかのパラメーターに Parameter 属性を付ける

    最もよく使われるのは CmdletBinding 属性です。

CmdletBinding 属性

    [CmdletBinding()] を付けると、関数はコマンドレットとして扱われます。
    これにより共通パラメーターが使えるようになり、$PSCmdlet などの機能も
    利用できます。

    function Verb-Noun
    {
        [CmdletBinding()]
        param ()
        process { }
    }

基本的な構造の例

    次の Send-Greeting は、必須パラメーターを持つ高度な関数の例です。

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

        process
        {
            Write-Host "こんにちは、$Name さん"
        }
    }

    # 呼び出し例
    Send-Greeting -Name "鈴木"

    process ブロックは、コンパイル済みコマンドレットの ProcessRecord
    メソッドに相当します。パイプライン入力を 1 件ずつ処理します。

パラメーター属性

    パラメーターには Parameter 属性や Alias 属性などを付けられます。

    function Get-Sample
    {
        [CmdletBinding()]
        param (
            [Parameter(Mandatory = $true,
                       ValueFromPipeline = $true)]
            [Alias("FullName")]
            [string]$Path
        )
        process { $Path }
    }

    各種の検証属性(ValidateSet, ValidateRange など)やパラメーターの
    詳細については about_Functions_Advanced_Parameters を参照してください。

コンパイル済みコマンドレットとの相違点

    高度な関数は、コンパイル済みコマンドレットとほぼ同様に動作しますが、
    次の点が異なります。

    1. 文字列の配列を Boolean 型パラメーターに結び付ける際の動作が、
       パラメーターバインディングで異なる場合があります。
    2. ValidateSet 属性や ValidatePattern 属性で、名前付き引数を
       使えません。
    3. 高度な関数はトランザクションに参加できません。

関連項目
    about_Functions
    about_Functions_Advanced_Methods
    about_Functions_Advanced_Parameters
    about_Functions_CmdletBindingAttribute
    about_Functions_OutputTypeAttribute
    about_Parameters
    about_Comment_Based_Help

----
原文: PowerShell-Docs (CC BY 4.0) の翻訳 / PSHelpJaJP