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 |