ja-JP/about_Functions.help.txt

TOPIC
    about_Functions

簡単な説明
    PowerShell における関数(function)の作り方と使い方を説明します。
    関数は、名前を付けた一連の文(ステートメント)のまとまりです。

詳細な説明
    関数とは、名前を付けた PowerShell の文のまとまりです。関数を呼び出すと、
    その名前を入力するだけで、含まれている文を実行できます。関数は入力を
    受け取り、出力(戻り値)をパイプラインに返すことができます。

    関数は、コマンドレットと同じように使えます。引数やパラメーターを取り、
    値を返し、Get-Command などで一覧できます。関数は「動詞-名詞」の命名規則
    に従うことが推奨されます(例: Get-Item, Set-Date)。承認された動詞の
    一覧は Get-Verb で確認できます。

    関数は、呼び出す前に定義しておく必要があります。スクリプトやモジュール
    の中では、関数を使用する位置よりも前に定義してください。

構文

    function [<スコープ:>]<名前> [([type]$引数1, [type]$引数2)]
    {
        param([type]$Parameter1, [type]$Parameter2)
        dynamicparam {<文のリスト>}
        begin {<文のリスト>}
        process {<文のリスト>}
        end {<文のリスト>}
        clean {<文のリスト>}
    }

    名前以外の要素はすべて省略可能です。最も単純な関数は次の形です。

    function <名前> { <文のリスト> }

簡単な例

    function Get-PowerShellProcess { Get-Process PowerShell }

    # 定義後は名前で呼び出せます
    Get-PowerShellProcess

パラメーターを持つ関数

    関数には 2 通りのパラメーター指定方法があります。

    1) param キーワードで宣言する方法(推奨)

       function Get-SmallFiles
       {
           param ([int64]$Size)

           Get-ChildItem $HOME | Where-Object {
               $_.Length -lt $Size -and -not $_.PSIsContainer
           }
       }

       # 呼び出し例(パラメーター名を指定)
       Get-SmallFiles -Size 1000

       # 位置指定でも呼び出せます
       Get-SmallFiles 1000

    2) 名前の直後にカッコで宣言する方法

       function Get-SmallFiles ([int64]$Size) { ... }

    既定値を持つパラメーター

       function Add-Numbers
       {
           param ([int]$X = 1, [int]$Y = 2)
           $X + $Y
       }
       Add-Numbers # 3 を返す
       Add-Numbers 5 10 # 15 を返す

位置指定パラメーターと $args

    パラメーターを宣言しない場合、渡された値は自動変数 $args に配列として
    格納されます。

    function Get-Sum
    {
        $total = 0
        foreach ($n in $args) { $total += $n }
        $total
    }
    Get-Sum 1 2 3 4 # 10 を返す

スイッチパラメーター

    値を取らず、指定の有無で真偽を表すパラメーターです。[switch] 型で
    宣言します。

    function Switch-Item
    {
        param ([switch]$On)
        if ($On) { "オンです" } else { "オフです" }
    }
    Switch-Item -On # オンです
    Switch-Item # オフです

パイプライン処理用のブロック

    関数がパイプラインから入力を受け取る場合、begin / process / end の
    各ブロックを使います。

    - begin : 最初に 1 回だけ実行され、前処理を行います。
    - process : パイプラインの各オブジェクトごとに 1 回実行されます。
                現在のオブジェクトは $_ または $PSItem で参照します。
    - end : すべての入力処理後に 1 回だけ実行されます。
    - clean : PowerShell 7.3 で追加。begin/process/end の前後で確保した
                リソースの後始末(クリーンアップ)を行います。正常終了・
                エラー・中断のいずれの場合でも実行されます。

    function Get-Pipeline
    {
        process { "受け取った値: $_" }
    }
    1, 2, 3 | Get-Pipeline

filter 関数

    filter キーワードで定義した関数は、各オブジェクトを process ブロックで
    処理する関数と同等です。

    filter Get-ErrorLog { if ($_ -match "Error") { $_ } }

関数のスコープ

    関数は既定で、定義されたスコープ内だけで有効です。明示的にスコープを
    指定するには、名前の前にスコープ修飾子を付けます。

    function Global:Get-Sample { "グローバル関数です" }

    スクリプト内で定義した関数は、既定でそのスクリプトに対してローカルです。

関数のヘルプ

    関数には、コメントベースのヘルプ(コメント内の特殊キーワード)または
    XML ベースのヘルプを付けられます。詳しくは
    about_Comment_Based_Help を参照してください。

関連項目
    about_Functions_Advanced
    about_Parameters
    about_Comment_Based_Help
    about_Scopes
    about_Automatic_Variables
    Get-Verb

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